diff --git a/.bowerrc b/.bowerrc new file mode 100755 index 0000000..1669168 --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory" : "vendor/bower" +} diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..140ce7a --- /dev/null +++ b/.gitignore @@ -0,0 +1,52 @@ +# yii console command +/yii + +# phpstorm project files +.idea + +# netbeans project files +nbproject + +# zend studio for eclipse project files +.buildpath +.project +.settings + +# windows thumbnail cache +Thumbs.db + +# composer vendor dir +/vendor + +# composer itself is not needed +composer.phar + +# Mac DS_Store Files +.DS_Store + +# phpunit itself is not needed +phpunit.phar +# local phpunit config +/phpunit.xml + +/storage +storage.zip +/common/config/main-local.php +/common/config/params-local.php +/backend/config/main-local.php +/backend/config/params-local.php +/backend/runtime/ +/frontend/config/main-local.php +/frontend/config/params-local.php +/frontend/runtime/ +/backend/web/assets/ +/frontend/web/assets/ +/frontend/web/upload/ +/frontend/web/css/node_modules/ +/frontend/web/images/ +/frontend/views/вертска +composer.lock + +tests/_output/* +/common/modules/_comment/ +Будет удалено common/modules/comment/ diff --git a/.htaccess b/.htaccess new file mode 100755 index 0000000..9e47147 --- /dev/null +++ b/.htaccess @@ -0,0 +1,228 @@ +AddDefaultCharset utf-8 + + + + RewriteEngine On + + + + + + RewriteBase / + # deal with admin first + #liniya svitla only + + RewriteRule (.*)lyustry-2.htm /catalog/lyustry-i-potolochnoe-osveshchenie/filters:podrazdel-lustri=lyustra [R=301,L] + RewriteRule (.*)sovremennye-3448.htm /catalog/lyustry-i-potolochnoe-osveshchenie/filters:style-lustri=sovremennyy-6 [R=301,L] + RewriteRule (.*)klassicheskie-3407.htm /catalog/lyustry-i-potolochnoe-osveshchenie/filters:style-lustri=klassicheskiy-4 [R=301,L] + RewriteRule (.*)podvesnye-3439.htm /catalog/lyustry-i-potolochnoe-osveshchenie/filters:podrazdel-lustri=podves [R=301,L] + RewriteRule (.*)dlya-vannyh-3496.htm /catalog/lyustry-i-potolochnoe-osveshchenie/filters:podrazdel-lustri=lyustry-dlya-vy [R=301,L] + RewriteRule (.*)detskie-3495.htm /catalog/lyustry-i-potolochnoe-osveshchenie/filters:podrazdel-lustri=det-3 [R=301,L] + RewriteRule (.*)dlya-vannyh-14.htm /catalog/svetilniki-dlya-vannyh-komnat [R=301,L] + RewriteRule (.*)bra-3438.htm /catalog/svetilniki-dlya-vannyh-komnat/filters:podrazdel-vanna=bra-i-nastennye-svetilniki-2 [R=301,L] + RewriteRule (.*)lyustry-3459.htm /catalog/svetilniki-dlya-vannyh-komnat/filters:podrazdel-vanna=lyustry-i-potolochnye-svetilniki-2 [R=301,L] + RewriteRule (.*)ulichnye-22.htm /catalog/ulichnoe-osveshchenie [R=301,L] + RewriteRule (.*)podvesnye-3416.htm /catalog/ulichnoe-osveshchenie/filters:podrazdel-ulichnoe=podvesnye [R=301,L] + RewriteRule (.*)perenosnye-3406.htm /catalog/ulichnoe-osveshchenie/filters:podrazdel-ulichnoe=perenosnye [R=301,L] + RewriteRule (.*)nastenno-potolochnye-3418.htm /catalog/ulichnoe-osveshchenie/filters:podrazdel-ulichnoe=nastenno-potolochnye [R=301,L] + RewriteRule (.*)vstraivaemye-v-grunt-3420.htm /catalog/ulichnoe-osveshchenie/filters:podrazdel-ulichnoe=vstraivaemye-v-grunt [R=301,L] + RewriteRule (.*)vreznye-3419.htm /catalog/ulichnoe-osveshchenie/filters:podrazdel-ulichnoe=vreznye-2 [R=301,L] + RewriteRule (.*)stolbiki-bolshie-3415.htm /catalog/ulichnoe-osveshchenie/filters:podrazdel-ulichnoe=stolby [R=301,L] + RewriteRule (.*)abajur-3453.htm /catalog/abazhury-i-plafony [R=301,L] + RewriteRule (.*)lampochki-29.htm /catalog/lampochki [R=301,L] + RewriteRule (.*)lampochki-29/fbrandlist-4 /catalog/lampochki/filters:brands=philips [R=301,L] + RewriteRule (.*)lampochki-29/fbrandlist-5 /catalog/lampochki/filters:brands=pila [R=301,L] + RewriteRule (.*)lampochki-29/fbrandlist-13 /catalog/lampochki/filters:brands=light-topps [R=301,L] + RewriteRule (.*)lampochki-29/fcatlist-40.htm /catalog/lampochki/filters:podrazdel-lampo4ki=galogenovye [R=301,L] + RewriteRule (.*)lampochki-29/fcatlist-36.htm /catalog/lampochki/filters:podrazdel-lampo4ki=lyuminiscentnye [R=301,L] + RewriteRule (.*)lampochki-29/fcatlist-30.htm /catalog/lampochki/filters:podrazdel-lampo4ki=nakalivaniya [R=301,L] + RewriteRule (.*)lampochki-29/fcatlist-43.htm /catalog/lampochki/filters:podrazdel-lampo4ki=svetodiodnye-led [R=301,L] + RewriteRule (.*)bra-5.htm /catalog/bra-i-nastennoe-osveshchenie/filters:podrazdel-bra=bra [R=301,L] + RewriteRule (.*)bra-5/fbrandlist-7 /catalog/bra-i-nastennoe-osveshchenie/filters:brands=elstead [R=301,L] + RewriteRule (.*)bra-5/fbrandlist-2 /catalog/bra-i-nastennoe-osveshchenie/filters:brands=eseo [R=301,L] + RewriteRule (.*)bra-5/fbrandlist-3 /catalog/bra-i-nastennoe-osveshchenie/filters:brands=lirio [R=301,L] + RewriteRule (.*)bra-5/fbrandlist-1 /catalog/bra-i-nastennoe-osveshchenie/filters:brands=massive [R=301,L] + RewriteRule (.*)bra-5/fbrandlist-4 /catalog/bra-i-nastennoe-osveshchenie/filters:brands=philips [R=301,L] + RewriteRule (.*)dlya-vannyh-3501.htm /catalog/bra-i-nastennoe-osveshchenie/filters:podrazdel-bra=dlya-vynny [R=301,L] + RewriteRule (.*)podsvetki-3503.htm /catalog/bra-i-nastennoe-osveshchenie/filters:podrazdel-bra=podsvetki-kartin [R=301,L] + RewriteRule (.*)detskie-3500.htm /catalog/bra-i-nastennoe-osveshchenie/filters:podrazdel-bra=det-2 [R=301,L] + RewriteRule (.*)bra-5/fcatlist-3318.htm /catalog/bra-i-nastennoe-osveshchenie/filters:style-bra=klassicheskiy-3 [R=301,L] + RewriteRule (.*)klassicheskie-3413.htm /catalog/bra-i-nastennoe-osveshchenie/filters:podrazdel-bra=nastenye-svetilniki [R=301,L] + RewriteRule (.*)lyustry-2/fbrandlist-1 /catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=massive [R=301,L] + RewriteRule (.*)lyustry-2/fbrandlist-4 /catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=philips [R=301,L] + RewriteRule (.*)lyustry-2/fbrandlist-7 /catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=elstead [R=301,L] + RewriteRule (.*)nastolnye-7.htm /catalog/nastolnye-lampy [R=301,L] + RewriteRule (.*)nastolnye-7/fbrandlist-4 /catalog/nastolnye-lampy/filters:brands=philips [R=301,L] + RewriteRule (.*)ofisnye-3402.htm /catalog/nastolnye-lampy/filters:podrazdel-nastolnie=ofisnye [R=301,L] + RewriteRule (.*)detskie-3504.htm /catalog/nastolnye-lampy/filters:podrazdel-nastolnie=det [R=301,L] + RewriteRule (.*)torshery-6.htm /catalog/torshery [R=301,L] + RewriteRule (.*)torshery-klassicheskie-3444.htm /catalog/torshery/filters:style-torsher=klassicheskiy-7 [R=301,L] + RewriteRule (.*)torshery-sovremennye-3440.htm /catalog/torshery/filters:style-torsher=sovremennyy-10 [R=301,L] + RewriteRule (.*)massive.htm /brands/massive [R=301,L] + RewriteRule (.*)detskie-15.htm /catalog/detskie-svetilniki/filters:brands=massive [R=301,L] + RewriteRule (.*)ulichnye-22/fbrandlist-1 /catalog/ulichnoe-osveshchenie/filters:brands=massive [R=301,L] + RewriteRule (.*)philips.htm /brands/philips [R=301,L] + RewriteRule (.*)spoty-9.htm /catalog/tochechnoe/filters:podrazdel-tochki=spoty [R=301,L] + RewriteRule (.*)tochechnye-8.htm /catalog/tochechnoe [R=301,L] + RewriteRule (.*)tochechnye-8/fbrandlist-4 /catalog/tochechnoe/filters:brands=philips [R=301,L] + RewriteRule (.*)vreznye-3400.htm /catalog/tochechnoe/filters:podrazdel-tochki=vreznye [R=301,L] + RewriteRule (.*)tochechnye-8/fcatlist-3351.htm /catalog/tochechnoe/filters:podrazdel-tochki=tochechnoe-osveshchenie-2 [R=301,L] + RewriteRule (.*)nakladnye-3431.htm /catalog/tochechnoe/filters:podrazdel-tochki=nakladnye [R=301,L] + RewriteRule (.*)podsvetki-3434.htm /catalog/svetilniki-gadzhety [R=301,L] + RewriteRule (.*)dlya-vannyh-14/fcatlist-3365.htm /catalog/aksessuary/filters:podrazdel-aksesyari=zerkala [R=301,L] + RewriteRule (.*)galogennye-3516.htm /catalog/lampochki/filters:podrazdel-lampo4ki=galogenovye [R=301,L] + + + RewriteRule (.*).htm / [R=301,L] + #RewriteRule (.*)shops.htm / [R=301,L] + #RewriteRule (.*)dlya-kuhon-16.htm / [R=301,L] + RewriteRule (.*)actions/(.*) / [R=301,L] + RewriteRule (.*)fbrandlist-(.*) / [R=301,L] + RewriteRule (.*)fcatlist-(.*) / [R=301,L] + + + RewriteRule ^storage/(.*)?$ /storage/$1 [L,PT] + RewriteRule ^generator/(.*)?$ /generator/$1 [L,PT] + + RewriteCond %{REQUEST_URI} ^/(admin) + + + + RewriteRule ^admin/assets/(.*)$ backend/web/assets/$1 [L] + + RewriteRule ^admin/css/(.*)$ backend/web/css/$1 [L] + + RewriteRule ^admin/js/(.*)$ backend/web/js/$1 [L] + + RewriteRule ^admin/images/(.*)$ backend/web/images/$1 [L] + + RewriteRule ^admin/fonts/(.*)$ backend/web/fonts/$1 [L] + + + + + + RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css|js|images|fonts)/ + + RewriteCond %{REQUEST_URI} ^/(admin) + + RewriteRule ^.*$ backend/web/index.php [L] + + + RewriteCond %{REQUEST_URI} ^/(assets|css) + + RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L] + + RewriteRule ^css/(.*)$ frontend/web/css/$1 [L] + + RewriteRule ^js/(.*)$ frontend/web/js/$1 [L] + + RewriteRule ^images/(.*)$ frontend/web/images/$1 [L] + + RewriteRule ^libraries/(.*)$ frontend/web/libraries/$1 [L] + + RewriteRule ^img/(.*)$ frontend/web/img/$1 [L] + + RewriteRule ^files/(.*)$ frontend/web/files/$1 [L] + + RewriteRule ^fonts/(.*)$ frontend/web/fonts/$1 [L] + + RewriteRule robots.txt$ frontend/web/robots.txt [L] + + RewriteRule sitemap.xml$ frontend/web/sitemap.xml [L] + + RewriteCond %{REQUEST_URI} !^/(frontend|backend)/web/(assets|css|txt|js|images|fonts|img|files)/ + + RewriteCond %{REQUEST_URI} !index.php + + RewriteCond %{REQUEST_FILENAME} !-f [OR] + + RewriteCond %{REQUEST_FILENAME} !-d + + + RewriteCond %{HTTP_HOST} ^www\.(.*) + RewriteRule ^(.*)$ frontend/web/index.php + + + RewriteCond %{HTTP_HOST} ^([^www].*)$ + RewriteRule (.*) http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] + + RewriteCond %{THE_REQUEST} \s/+(.+?)/+[?\s] + RewriteRule /$ /%1 [R=301,L] + + + RewriteCond %{HTTP_HOST} ^([^www].*)$ + RewriteRule ^(.*)$ http://www.%1/$1 [R=301] + + + +#для возможности загрузки файлов парсера + + php_value upload_max_filesize 20M + php_value post_max_size 30M + + + +# кеширование в браузере на стороне пользователя + + + ExpiresActive On + ExpiresDefault "access 7 days" + ExpiresByType application/javascript "access plus 1 year" + ExpiresByType text/javascript "access plus 1 year" + ExpiresByType text/css "access plus 1 year" + ExpiresByType text/html "access plus 7 day" + ExpiresByType text/x-javascript "access 1 year" + ExpiresByType image/gif "access plus 1 year" + ExpiresByType image/jpeg "access plus 1 year" + ExpiresByType image/png "access plus 1 year" + ExpiresByType image/jpg "access plus 1 year" + ExpiresByType image/x-icon "access 1 year" + ExpiresByType application/x-shockwave-flash "access 1 year" + + +AddOutputFilterByType DEFLATE text/plain +AddOutputFilterByType DEFLATE text/html +AddOutputFilterByType DEFLATE text/xml +AddOutputFilterByType DEFLATE text/css +AddOutputFilterByType DEFLATE application/xml +AddOutputFilterByType DEFLATE application/xhtml+xml +AddOutputFilterByType DEFLATE application/rss+xml +AddOutputFilterByType DEFLATE application/javascript +AddOutputFilterByType DEFLATE application/x-javascript +BrowserMatch ^Mozilla/4 gzip-only-text/html +BrowserMatch ^Mozilla/4\.0[678] no-gzip +BrowserMatch \bMSIE !no-gzip !gzip-only-text/html +Header append Vary User-Agent +RewriteEngine On +AddEncoding gzip .gz +RewriteCond %{HTTP:Accept-encoding} gzip +RewriteCond %{REQUEST_FILENAME}.gz -f +RewriteRule ^(.*)$ $1.gz [QSA,L] + +# Cache-Control + +# 30 дней + + Header set Cache-Control "max-age=2592000, public" + + # 30 дней + + Header set Cache-Control "max-age=2592000, public" + + # 2 дня + + Header set Cache-Control "max-age=172800, public, must-revalidate" + + # 1 день + + Header set Cache-Control "max-age=172800, private, must-revalidate" + + + +#Запрет отдачи HTTP-заголовков Vary браузерам семейства MSIE + +BrowserMatch "MSIE" force-no-vary +BrowserMatch "Mozilla/4.[0-9]{2}" force-no-vary + + diff --git a/LICENSE.md b/LICENSE.md new file mode 100755 index 0000000..9d1f119 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,32 @@ +The Yii framework is free software. It is released under the terms of +the following BSD License. + +Copyright © 2008 by Yii Software LLC (http://www.yiisoft.com) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Yii Software LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100755 index 0000000..6028cf0 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +Yii 2 Advanced Project Template +=============================== + +Yii 2 Advanced Project Template is a skeleton [Yii 2](http://www.yiiframework.com/) application best for +developing complex Web applications with multiple tiers. + +The template includes three tiers: front end, back end, and console, each of which +is a separate Yii application. + +The template is designed to work in a team development environment. It supports +deploying the application in different environments. + +Documentation is at [docs/guide/README.md](docs/guide/README.md). + +[![Latest Stable Version](https://poser.pugx.org/yiisoft/yii2-app-advanced/v/stable.png)](https://packagist.org/packages/yiisoft/yii2-app-advanced) +[![Total Downloads](https://poser.pugx.org/yiisoft/yii2-app-advanced/downloads.png)](https://packagist.org/packages/yiisoft/yii2-app-advanced) +[![Build Status](https://travis-ci.org/yiisoft/yii2-app-advanced.svg?branch=master)](https://travis-ci.org/yiisoft/yii2-app-advanced) + +DIRECTORY STRUCTURE +------------------- + +``` +common + config/ contains shared configurations + mail/ contains view files for e-mails + models/ contains model classes used in both backend and frontend +console + config/ contains console configurations + controllers/ contains console controllers (commands) + migrations/ contains database migrations + models/ contains console-specific model classes + runtime/ contains files generated during runtime +backend + assets/ contains application assets such as JavaScript and CSS + config/ contains backend configurations + controllers/ contains Web controller classes + models/ contains backend-specific model classes + runtime/ contains files generated during runtime + views/ contains view files for the Web application + web/ contains the entry script and Web resources +frontend + assets/ contains application assets such as JavaScript and CSS + config/ contains frontend configurations + controllers/ contains Web controller classes + models/ contains frontend-specific model classes + runtime/ contains files generated during runtime + views/ contains view files for the Web application + web/ contains the entry script and Web resources + widgets/ contains frontend widgets +vendor/ contains dependent 3rd-party packages +environments/ contains environment-based overrides +tests contains various tests for the advanced application + codeception/ contains tests developed with Codeception PHP Testing Framework +``` diff --git a/backend/assets/AdminLteAsset.php b/backend/assets/AdminLteAsset.php new file mode 100755 index 0000000..c4a7c67 --- /dev/null +++ b/backend/assets/AdminLteAsset.php @@ -0,0 +1,35 @@ + + * @since 2.0 + */ +class AdminLteAsset extends AssetBundle +{ + public $sourcePath = '@bower/'; + public $css = [ + 'admin-lte/dist/css/AdminLTE.css', + 'admin-lte/dist/css/skins/_all-skins.css' + ]; + + public $js = [ + 'admin-lte/dist/js/app.js', + + ]; + public $depends = [ + 'yii\web\YiiAsset', + 'common\modules\file\FileUploadAsset', + 'yii\bootstrap\BootstrapPluginAsset', + 'backend\assets\FontAwesomeAsset', + + ]; +} \ No newline at end of file diff --git a/backend/assets/AppAsset.php b/backend/assets/AppAsset.php new file mode 100755 index 0000000..3f9bf26 --- /dev/null +++ b/backend/assets/AppAsset.php @@ -0,0 +1,31 @@ + + * @since 2.0 + */ +class AppAsset extends AssetBundle +{ + public $basePath = '@webroot'; + public $baseUrl = '@web'; + public $css = [ + 'css/site.css', + ]; + public $js = [ + 'js/fieldWidget.js', + 'js/site.js', + ]; + public $depends = [ + 'yii\web\YiiAsset', + 'yii\bootstrap\BootstrapAsset', + ]; +} diff --git a/backend/assets/FontAwesomeAsset.php b/backend/assets/FontAwesomeAsset.php new file mode 100755 index 0000000..72d6f21 --- /dev/null +++ b/backend/assets/FontAwesomeAsset.php @@ -0,0 +1,14 @@ + 'app-backend', + 'basePath' => dirname(__DIR__), + 'controllerMap' => [ + 'elfinder' => [ + 'class' => 'mihaildev\elfinder\Controller', + 'access' => ['@'], //глобальный доступ к фаил менеджеру @ - для авторизорованных , ? - для гостей , чтоб открыть всем ['@', '?'] + 'disabledCommands' => ['netmount'], //отключение ненужных команд https://github.com/Studio-42/elFinder/wiki/Client-configuration-options#commands + 'roots' => [ + [ + 'class' => 'mihaildev\elfinder\volume\UserPath', + 'path' => '../../storage/user_{id}', + 'name' => 'My Documents' + ], + ], + 'watermark' => [ + 'source' => __DIR__.'/logo.png', // Path to Water mark image + 'marginRight' => 5, // Margin right pixel + 'marginBottom' => 5, // Margin bottom pixel + 'quality' => 95, // JPEG image save quality + 'transparency' => 70, // Water mark image transparency ( other than PNG ) + 'targetType' => IMG_GIF|IMG_JPG|IMG_PNG|IMG_WBMP, // Target image formats ( bit-field ) + 'targetMinPixel' => 200 // Target image minimum pixel size + ] + ], + 'artbox-comments' => [ + 'class' => 'common\modules\comment\controllers\ManageController', + 'viewPath' => '@common/modules/comment/views/manage', + ], + ], + 'layout' => 'admin', + 'controllerNamespace' => 'backend\controllers', + 'bootstrap' => ['log'], + 'as AccessBehavior' => [ + 'class' => ArtBoxAccessBehavior::className(), + 'rules' => + [ + 'permit/access' => + [ + [ + 'actions' => ['role', 'permission','add-role', 'update-role','add-permission', 'update-permission' ], + 'allow' => true, + ] + ], + 'site' => + [ + [ + 'actions' => ['login', 'error','logout',], + 'allow' => true, + ], + [ + 'actions' => ['index'], + 'allow' => true, + 'roles' => ['@'], + ], + [ + 'actions' => ['images'], + 'allow' => true, + 'roles' => ['@'], + ] + + ], + 'file/uploader' =>[ + [ + 'actions' => ['images-upload'], + 'allow' => true, + ] + ], + 'elfinder' => [ + [ + 'actions' => ['manager','connect'], + 'allow' => true, + ] + ] + + + ] + ], + 'modules' => [ + 'permit' => [ + 'class' => 'developeruz\db_rbac\Yii2DbRbac', + 'params' => [ + 'userClass' => 'backend\models\User' + ] + ], + + 'rubrication' => [ + 'class' => 'common\modules\rubrication\Module', + 'types' => [ + 'string' => 'Strings', + 'float' => 'Floating number', + 'int' => 'Integer number', + 'link' => 'Web-link', + ] + ], + 'product' => [ + 'class' => 'common\modules\product\Module' + ], + 'gridview' => [ + 'class' => '\kartik\grid\Module' + ], + 'artbox-comment' => [ + 'class' => 'common\modules\comment\Module', + 'userIdentityClass' => 'common\models\Customer', + ], + ], + 'components' => [ + 'assetManager' => [ + 'bundles' => [ + 'yii\web\JqueryAsset' =>[ + 'jsOptions' => ['position' => \yii\web\View::POS_HEAD] + ] + ], + ], + 'authManager' => [ + 'class' => 'yii\rbac\DbManager', + ], + 'user' => [ + 'identityClass' => 'common\models\User', + 'enableAutoLogin' => true, + ], + 'log' => [ + 'traceLevel' => YII_DEBUG ? 3 : 0, + 'targets' => [ + [ + 'class' => 'yii\log\FileTarget', + 'levels' => ['error', 'warning'], + ], + ], + ], + 'imageCache' => [ + 'class' => 'iutbay\yii2imagecache\ImageCache', + 'sourcePath' => '@storage', + 'sourceUrl' => '/storage', + 'thumbsPath' => '@storage/thumbs', + 'thumbsUrl' => '/storage/thumbs', + + 'sizes' => [ + 'slider' => [720, 340], + ], + ], + 'errorHandler' => [ + 'errorAction' => 'site/error', + ], + 'request'=>[ + 'cookieValidationKey' => 'j4iuot9u5894e7tu8reyh78g9y54sy7i', + 'csrfParam' => '_backendCSRF', + + 'class' => 'common\components\Request', + + 'web'=> '/backend/web', + + 'adminUrl' => '/admin' + + ], + 'urlManager' => [ + 'baseUrl' => '/admin', + 'enablePrettyUrl' => true, + 'showScriptName' => false, + 'rules' => [ + 'slider-image///' => 'slider-image/', + 'slider-image//' => 'slider-image/', + 'rubrication/tax-group/' => 'rubrication/tax-group', + 'rubrication/tax-group///' => 'rubrication/tax-group/', + 'rubrication/tax-group//' => 'rubrication/tax-group/', + 'product/manage/' => 'product/manage/', + 'product////' => 'product//', + 'product////' => 'product//', + 'product//' => 'product/', + 'seo-dynamic///' => 'seo-dynamic/', + 'seo-dynamic//' => 'seo-dynamic/', + ] + ] + + ], + 'params' => $params, +]; diff --git a/backend/config/params.php b/backend/config/params.php new file mode 100755 index 0000000..4ee7a49 --- /dev/null +++ b/backend/config/params.php @@ -0,0 +1,4 @@ + 'admin@example.com', +]; diff --git a/backend/controllers/ArticlesController.php b/backend/controllers/ArticlesController.php new file mode 100755 index 0000000..d588eff --- /dev/null +++ b/backend/controllers/ArticlesController.php @@ -0,0 +1,139 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all Articles models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new ArticlesSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Articles model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Articles model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Articles(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing Articles model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save() ) { + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing Articles model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Articles model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Articles the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Articles::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/BannerController.php b/backend/controllers/BannerController.php new file mode 100755 index 0000000..ccf4e70 --- /dev/null +++ b/backend/controllers/BannerController.php @@ -0,0 +1,157 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all Banner models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new BannerSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + public function actionSaveImageSettings(){ + \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; + $width = Yii::$app->request->post('width'); + $height = Yii::$app->request->post('height'); + + $html = ImageUploader::widget([ + 'model'=> new Banner(), + 'field'=>'image', + 'size' => [ + [ + 'width'=>$width, + 'height'=>$height, + ], + ], + 'name' => "Загрузить баннер" + ]); + + return ['html'=>$html]; + } + + /** + * Displays a single Banner model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Banner model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Banner(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->banner_id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing Banner model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->banner_id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing Banner model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Banner model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Banner the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Banner::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/BgController.php b/backend/controllers/BgController.php new file mode 100755 index 0000000..f87fdd6 --- /dev/null +++ b/backend/controllers/BgController.php @@ -0,0 +1,136 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all Bg models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new BgSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Bg model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Bg model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Bg(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing Bg model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing Bg model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Bg model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Bg the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Bg::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/BlogController.php b/backend/controllers/BlogController.php new file mode 100755 index 0000000..4bf7891 --- /dev/null +++ b/backend/controllers/BlogController.php @@ -0,0 +1,160 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'logout' => ['post'], + ], + ], + ]; + } + + /** + * Lists all Blog models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new BlogSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Blog model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Blog model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Blog(); + + if ($model->load(Yii::$app->request->post())) { + + Fields::saveFieldData(Yii::$app->request->post('Fields'), $model->blog_id, Blog::className(), 'ru'); + + if ( ($image = UploadedFile::getInstance($model, 'imageUpload')) ) { + $model->cover = $image->name; + } + + if ($model->save() && $image) { + $image->saveAs(Yii::getAlias('@imagesDir/articles/' . $image->name)); + } + + return $this->redirect(['view', 'id' => $model->blog_id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing Blog model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post())) { + + Fields::saveFieldData(Yii::$app->request->post('Fields'), $model->blog_id, Blog::className(), 'ru'); + + if ( ($image = UploadedFile::getInstance($model, 'imageUpload')) ) { + $model->cover = $image->name; + } + + if ($model->save() && $image) { + $image->saveAs(Yii::getAlias('@imagesDir/articles/' . $image->name)); + } + + return $this->redirect(['view', 'id' => $model->blog_id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing Blog model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Blog model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Blog the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Blog::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/BrandController.php b/backend/controllers/BrandController.php new file mode 100755 index 0000000..c23a105 --- /dev/null +++ b/backend/controllers/BrandController.php @@ -0,0 +1,141 @@ + [ + 'class' => AccessControl::className(), + 'rules' => [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ], + [ + 'actions' => ['logout', 'index', 'create', 'update', 'view', 'delete'], + 'allow' => true, + 'roles' => ['@'], + ], + ], + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'logout' => ['post'], + ], + ], + ]; + } + + /** + * Lists all Brand models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new BrandSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Brand model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Brand model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Brand(); + if ($model->load(Yii::$app->request->post()) && $model->save()) { + + return is_null(Yii::$app->request->post('create_and_new')) ? $this->redirect(['view', 'id' => $model->brand_id]) : $this->redirect(array_merge(['create'], Yii::$app->request->queryParams)); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing Brand model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + + return $this->redirect(['view', 'id' => $model->brand_id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing Brand model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Brand model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Brand the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Brand::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/CategoryController.php b/backend/controllers/CategoryController.php new file mode 100755 index 0000000..11c2b78 --- /dev/null +++ b/backend/controllers/CategoryController.php @@ -0,0 +1,161 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'logout' => ['post'], + ], + ], + ]; + } + + /** + * Lists all Category models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new CategorySearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Category model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Category model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Category(); + + if ($model->load(Yii::$app->request->post())) { + if ( ($image = UploadedFile::getInstance($model, 'imageUpload')) ) { + $model->image = $image->name; + } + + if ($model->save() && $image) { + $image->saveAs(Yii::getAlias('@imagesDir/categories/' . $image->name)); + } + + return is_null(Yii::$app->request->post('create_and_new')) ? $this->redirect(['view', 'id' => $model->category_id]) : $this->redirect(array_merge(['create'], Yii::$app->request->queryParams)); + } else { + if (!empty(Yii::$app->request->queryParams['parent'])) { + $model->parent_id = Yii::$app->request->queryParams['parent']; + } + return $this->render('create', [ + 'model' => $model, + 'categories' => ArtboxTreeHelper::treeMap(Category::find()->getTree(), 'category_id', 'name', '.') + ]); + } + } + + /** + * Updates an existing Category model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post())) { + if ( ($image = UploadedFile::getInstance($model, 'imageUpload')) ) { + $model->image = $image->name; + } + + if ($model->save() && $image) { + $image->saveAs(Yii::getAlias('@imagesDir/categories/' . $image->name)); + } + + return $this->redirect(['view', 'id' => $model->category_id]); + } else { + return $this->render('update', [ + 'model' => $model, + 'categories' => ArtboxTreeHelper::treeMap(Category::find()->getTree(), 'category_id', 'name', '.') + ]); + } + } + + /** + * Deletes an existing Category model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Category model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Category the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Category::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/CommentController.php b/backend/controllers/CommentController.php new file mode 100755 index 0000000..1023d5c --- /dev/null +++ b/backend/controllers/CommentController.php @@ -0,0 +1,159 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all Comment models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new CommentSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + $query = $dataProvider->query; + $query->with(['rating', 'user']); + $sort = $dataProvider->sort; + $sort->defaultOrder = [ + 'status' => SORT_ASC, + ]; + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Comment model. + * @param integer $id + * @return mixed + */ +// public function actionView($id) +// { +// return $this->render('view', [ +// 'model' => $this->findModel($id), +// ]); +// } + + /** + * Creates a new Comment model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ +// public function actionCreate() +// { +// $model = new Comment(); +// +// if ($model->load(Yii::$app->request->post()) && $model->save()) { +// return $this->redirect(['view', 'id' => $model->comment_id]); +// } else { +// return $this->render('create', [ +// 'model' => $model, +// ]); +// } +// } + + /** + * Updates an existing Comment model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->comment_id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + public function actionApprove($id) { + $model = $this->findModel($id); + $model->status = Comment::STATUS_ACTIVE; + $model->save(false); + + return $this->redirect(['index']); + } + + public function actionDisapprove($id) { + $model = $this->findModel($id); + $model->status = Comment::STATUS_HIDDEN; + $model->save(false); + + return $this->redirect(['index']); + } + + /** + * Deletes an existing Comment model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Comment model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Comment the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Comment::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/CustomerController.php b/backend/controllers/CustomerController.php new file mode 100755 index 0000000..c91e15d --- /dev/null +++ b/backend/controllers/CustomerController.php @@ -0,0 +1,136 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all Customer models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new CustomerSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Customer model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Customer model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Customer(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing Customer model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing Customer model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Customer model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Customer the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Customer::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/EventController.php b/backend/controllers/EventController.php new file mode 100755 index 0000000..3e09590 --- /dev/null +++ b/backend/controllers/EventController.php @@ -0,0 +1,186 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all Event models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new EventSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Event model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Event model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Event(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + + if ( ($image = UploadedFile::getInstance($model, 'imageUpload')) ) { + $model->image = $image->name; + $image->saveAs(Yii::getAlias('@imagesDir/event/' . $image->name)); + } + + if ( ($banner = UploadedFile::getInstance($model, 'banner')) ) { + $model->banner = $banner->name; + $image->saveAs(Yii::getAlias('@imagesDir/event/' . $banner->name)); + } + + + return $this->redirect(['view', 'id' => $model->event_id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing Event model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post())) { + + if ( ($image = UploadedFile::getInstance($model, 'imageUpload')) ) { + $model->image = $image->name; + } + + if ( ($banner = UploadedFile::getInstance($model, 'banner')) ) { + $model->banner = $banner->name; + $banner->saveAs(Yii::getAlias('@imagesDir/event/' . $banner->name)); + } + + if ($model->save() && $image) { + $image->saveAs(Yii::getAlias('@imagesDir/event/' . $image->name)); + + } + + + + if ( ($file = UploadedFile::getInstance($model, 'products_file')) ) { + if(!empty($file)){ + $file->saveAs(Yii::getAlias('@uploadDir/' . $file->name)); + $import = new Import(); + $import->goEvent(Yii::getAlias('@uploadDir/' . $file->name)); + } + + } + + return $this->redirect(['view', 'id' => $model->event_id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing Event model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + public function actionDelimg($id,$field){ + $model = $this->findModel($id); + $model->detachBehavior('img'); + $model->$field = ''; + $model->save(); + return true; + } + + + /** + * Finds the Event model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Event the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Event::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/FeedbackController.php b/backend/controllers/FeedbackController.php new file mode 100755 index 0000000..c9ddba8 --- /dev/null +++ b/backend/controllers/FeedbackController.php @@ -0,0 +1,85 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all Feedback models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new FeedbackSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Deletes an existing Feedback model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Feedback model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Feedback the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Feedback::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/OrdersController.php b/backend/controllers/OrdersController.php new file mode 100755 index 0000000..4794d3a --- /dev/null +++ b/backend/controllers/OrdersController.php @@ -0,0 +1,145 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + public function actionIndex() + { + $searchModel = new OrdersSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'dataProvider'=>$dataProvider, + 'searchModel'=>$searchModel, + ]); + } + + public function actionShow($id) + { + + $model = $this->findModel((int)$id); + $dataProvider = new ActiveDataProvider([ + 'query' => OrdersProducts::find()->where(['order_id'=>(int)$id]), + 'pagination' => [ + 'pageSize' => 20, + ], + ]); + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['index']); + } else { + $model_orderproducts = new OrdersProducts; + + + return $this->renderAjax('show', [ + 'model' => $model, + 'model_orderproducts'=>$model_orderproducts, + 'dataProvider' => $dataProvider, + ]); + } + } + + public function actionLabelupdate(){ + $model = Orders::findOne($_POST['order_id']); + $model->label = $_POST['label_id']; + $model->save(); + } + + public function actionPayupdate(){ + $model = Orders::findOne($_POST['order_id']); + $model->pay = $_POST['pay_id']; + $model->save(); + } + + public function actionDelete(){ + $model = Orders::findOne($_GET['id']); + $model->delete(); + return Yii::$app->response->redirect(['/orders/index']); + } + + + public function actionAdd(){ + $model = new OrdersProducts; + if ($model->load(Yii::$app->request->post())) { + + if(!$modelMod = ProductVariant::find()->with(['product'])->where(['sku'=>$model->sku])->one()) + throw new HttpException(404, 'Данного артикля не существует!'); + $model->product_name = $modelMod->product->name; + $model->name = $modelMod->name; + $model->sku = $modelMod->sku; + $model->price = $modelMod->price; + $model->sum_cost = $model->count*$modelMod->price; + $model->mod_id = $modelMod->id; + $model->save(); + //return Yii::$app->response->redirect(['/admin/orders/show','id'=>$_GET['order_id']]); + } + + //return $this->render('add',['model'=>$model]); + } + + public function actionCreate(){ + $model = new Orders(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['index']); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + public function actionDelete_product(){ + $model = OrdersProducts::findOne($_GET['id']); + $model->delete(); + return Yii::$app->response->redirect(['/admin/orders/show','id'=>$_GET['order_id']]); + } + + protected function findModel($id) + { + if (($model = Orders::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/PageController.php b/backend/controllers/PageController.php new file mode 100755 index 0000000..fbe101f --- /dev/null +++ b/backend/controllers/PageController.php @@ -0,0 +1,136 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all Page models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new PageSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Page model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Page model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Page(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing Page model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing Page model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Page model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Page the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Page::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/SeoCategoryController.php b/backend/controllers/SeoCategoryController.php new file mode 100755 index 0000000..ea9046c --- /dev/null +++ b/backend/controllers/SeoCategoryController.php @@ -0,0 +1,134 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + + ], + ]; + } + + /** + * Lists all SeoCategory models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new SeoCategorySearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single SeoCategory model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new SeoCategory model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new SeoCategory(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->seo_category_id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing SeoCategory model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->seo_category_id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing SeoCategory model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the SeoCategory model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return SeoCategory the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = SeoCategory::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/SeoController.php b/backend/controllers/SeoController.php new file mode 100755 index 0000000..e3acfaf --- /dev/null +++ b/backend/controllers/SeoController.php @@ -0,0 +1,134 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + + ], + ]; + } + + /** + * Lists all Seo models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new SeoSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Seo model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Seo model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Seo(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->seo_id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing Seo model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->seo_id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing Seo model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Seo model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Seo the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Seo::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/SeoDynamicController.php b/backend/controllers/SeoDynamicController.php new file mode 100755 index 0000000..54c4162 --- /dev/null +++ b/backend/controllers/SeoDynamicController.php @@ -0,0 +1,140 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + + ], + ]; + } + + /** + * Lists all SeoDynamic models. + * @return mixed + */ + public function actionIndex($seo_category_id) + { + $searchModel = new SeoDynamicSearch(); + $dataProvider = $searchModel->search($seo_category_id,Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + 'seo_category_id' => $seo_category_id + ]); + } + + /** + * Displays a single SeoDynamic model. + * @param integer $id + * @return mixed + */ + public function actionView($seo_category_id, $id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + 'seo_category_id' => $seo_category_id + ]); + } + + /** + * Creates a new SeoDynamic model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate($seo_category_id) + { + $model = new SeoDynamic(); + + if ($model->load(Yii::$app->request->post())) { + $model->seo_category_id = $seo_category_id; + $model->save(); + return $this->redirect(['index', 'seo_category_id' => $model->seo_category_id]); + } else { + return $this->render('create', [ + 'model' => $model, + 'seo_category_id' => $seo_category_id + ]); + } + } + + /** + * Updates an existing SeoDynamic model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($seo_category_id,$id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['index', 'seo_category_id' => $model->seo_category_id]); + } else { + return $this->render('update', [ + 'model' => $model, + 'seo_category_id' => $seo_category_id + ]); + } + } + + /** + * Deletes an existing SeoDynamic model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($seo_category_id,$id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index','seo_category_id'=> $seo_category_id]); + } + + /** + * Finds the SeoDynamic model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return SeoDynamic the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = SeoDynamic::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/ServiceController.php b/backend/controllers/ServiceController.php new file mode 100755 index 0000000..4f199de --- /dev/null +++ b/backend/controllers/ServiceController.php @@ -0,0 +1,136 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all Service models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new ServiceSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Service model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Service model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Service(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->service_id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing Service model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->service_id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing Service model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Service model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Service the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Service::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/SiteController.php b/backend/controllers/SiteController.php new file mode 100755 index 0000000..86377ee --- /dev/null +++ b/backend/controllers/SiteController.php @@ -0,0 +1,726 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + ], + ], + ]; + } + + /** + * @inheritdoc + */ + public function actions() + { + return [ + 'error' => [ + 'class' => 'yii\web\ErrorAction', + ], + ]; + } + + + public function actionImages(){ + $files = ProductImage::find()->all(); + foreach($files as $file_object){ + $file = $file_object->image; + $file_array = explode('/',$file); + if(is_array($file_array) && count($file_array) >3){ + $count = count($file_array); + $file_name = $file_array[$count-2]."_".$file_array[$count-1]; + print_r($file_name); + $save_image = Yii::getAlias('@productsDir') . "/" . $file_name; + copy($file, $save_image); + $file_object->image = $file_name; + $file_object->save(); + } + + } + + + } + + public function actionIndex() + { + $blog = new Blog(); + $post = \Yii::$app->request->post(); + if($blog->load($post)) { + $blog->save(); + } + return $this->render('index',[ + 'blog' => $blog + ]); + } + + public function actionLogin() + { + $this->layout = '/none'; + + if (!\Yii::$app->user->isGuest) { + return $this->goHome(); + } + + $model = new LoginForm(); + if ($model->load(Yii::$app->request->post()) && $model->login()) { + return $this->redirect(Url::to('/admin/site/index')); + } else { + return $this->render('login', [ + 'model' => $model, + ]); + } + } + + public function actionLogout() + { + Yii::$app->user->logout(); + + return $this->goHome(); + } + + public function actionGo() { + $new_products = $linked_products = 0; + + // открываем файл и перебираем + $filename = Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts'); + if (!is_file($filename)) { + var_dump("File $filename not found"); + return Controller::EXIT_CODE_ERROR; + } + var_dump("File $filename loaded\n"); + + $db = yii::$app->db; + + if (($handle = fopen ($filename, 'r')) !== FALSE) + { + $j = 0; + + while (($data = fgetcsv ($handle, 10000, ";")) !== FALSE) + { + $j++; + + foreach ($data as &$value) + { + //$value = mb_convert_encoding ($value, "UTF-8", mb_detect_encoding ($value)); + $value = iconv ('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); + $value = trim ($value); + } + + // будет всегда 19 элементов + for ($i = 0; $i <= 18; $i++) + { + if (! isset ($data[$i])) + { + $data[$i] = null; + } + } + + // 1 Группа (категория) + $catalog_name = $data[0]; + if (empty ($catalog_name)) + { + CONTINUE; + } + + // 2 Бренд + $brand_name = $data[1]; + if (empty ($brand_name)) + { + CONTINUE; + } + + // 3 Название товара + $product_name = $data[2]; + if (empty ($product_name)) + { + CONTINUE; + } + + // 4 Описание Укр + $product_body_uk = $data[3]; + + // 5 Описание Рус + $product_body_ru = $data[4]; + + // 6 Фильтр (через запятую) + $filters = explode (',', $data[5]); + + // 7 Доп фильтр через запятую + $filters_extra = explode (',', $data[6]); + + // 8 Пол череззапятую (мужской, женский, детский, унисекс) + $gender = explode (',', $data[7]); + + // 9 Год + $years = explode (',', $data[8]); + + // 10 Цена старая + $product_cost_old = $data[9]; + + // 11 Цена + $produc_cost = $data[10]; + + // 12 Акция + $product_akciya = (bool)$data[11]; + + // 13 Сопуд. Тов. + $similar = explode (',', $data[12]); + + // 14 Новинки + $product_new = (bool)$data[13]; + + // 15 Топ продаж + $product_top = (bool)$data[14]; + + // 16 Сетка Характеристик + $feature = explode ('=', $data[15]); + + // 17 ВИДЕО КОД + $product_video = $data[16]; + + // 18 Галлерея фото + $fotos = explode (',', $data[17]); + + // 19 Штрих код товара. + // расшифровал - это модификации товара! + + $product_image = explode ('=', $data[18]); + $product_image = @$product_image[3]; + + if ( ($_product = Product::find()->filterWhere(['ilike', 'name', trim($product_name)])->one()) === null ) { + $_product = new Product(); + } + + // ==== Set category ==== + if ( ($category = Category::find()->filterWhere(['ilike', 'name', trim($catalog_name)])->one()) !== null ) { + $_product->categories = [$category->category_id]; + } else { + // Create category + $category = new Category(); + $category->name = trim($catalog_name); + $category->save(); + $_product->categories = [$category->category_id]; + } + + // ===== Set brand ==== + if ( $brand_name ) { + if ( ($brand = Brand::find()->filterWhere(['ilike', 'name', trim($brand_name)])->one()) !== null ) { + $_product->brand_id = $brand->brand_id; + } else { + // Create brand + $brand = new Brand(); + $brand->name = trim($brand_name); + $brand->save(); + $_product->brand_id = $brand->brand_id; + } + } + + $_product->name = $product_name; + $_product->video = $product_video; + $_product->description = $product_body_ru; + $_product->top = $product_top; + $_product->akciya = $product_akciya; + $_product->new = $product_new; + + + $_product->save(); + + + // @todo Set image + /*// картинки + if (is_file ($dir.'/mod/' . $product_image)) + { + $resizeObj = new resize ($dir.'/mod/' . $product_image); + $resizeObj->resizeImage (135, 200, 'auto'); + $resizeObj->saveImage ($dir.'/products/ico/' . $product_image, 100); + $resizeObj->resizeImage (370, 370, 'auto'); + $resizeObj->saveImage ($dir.'/products/big/' . $product_image, 100); + }*/ + + // ==== mods ==== + + // (типа штрих код товара) + + // нужно для проставления характеристик относящихся к модификациям + $MOD_ARRAY = []; + + for ($i = 18; $i < count ($data); $i ++) + { + if (! empty ($data[$i])) + { + $mod_arr = explode ('=', $data[$i]); + $mod_art = $mod_arr[0]; + $mod_size = $mod_arr[1]; + $mod_color = $mod_arr[2]; + $mod_image = $mod_arr[3]; + $mod_cost = $produc_cost; + $mod_old_cost = $product_cost_old; + + // Check product variant + if ( ($_productVariant = ProductVariant::find()->andWhere(['ilike', 'sku', $mod_art])->andWhere(['product_id' => $_product->product_id])->one()) === null ) { + $_productVariant = new ProductVariant(); + $_productVariant->product_id = $_product->product_id; + } + + $_productVariant->sku = $mod_art; + $_productVariant->price = $mod_cost; + $_productVariant->price_old = $mod_old_cost; + + $_productVariant->save(); + + $MOD_ARRAY[] = $_productVariant->product_variant_id; + + + $dir = Yii::getAlias('@productsDir').'/'; + if (is_file ($dir . $mod_image)) + { + $resizeObj = new resize ($dir . $mod_image); + $resizeObj->resizeImage (40, 40, 'crop'); + $resizeObj->saveImage ($dir.'ico/' . $mod_image, 100); + $resizeObj->resizeImage (370, 370, 'auto'); + $resizeObj->saveImage ($dir.'/big/' . $mod_image, 100); + } + + $product_variant_type_name = ''; + if (! empty ($mod_color)) + $product_variant_type_name = 'Цвет'; + elseif (! empty ($mod_size)) + $product_variant_type_name = 'Размер'; + + // ===== Set variant type ==== + if ( $product_variant_type_name ) { + if ( ($product_variant_type = ProductVariantType::find()->filterWhere(['ilike', 'name', $product_variant_type_name])->one()) !== null ) { + $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; + } else { + // Create brand + $product_variant_type = new ProductVariantType(); + $product_variant_type->name = $product_variant_type_name; + $product_variant_type->save(); + $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; + } + } + } + } + + /*// ==== fotos ==== + + foreach ($fotos as $foto) + { + $fields = [ + 'product_id' => $product_id, + 'image' => $foto + ]; + + $modelFotos = Fotos::find () + ->where ('image=:image', [ + ':image' => $foto + ]) + ->one (); + + if (empty ($modelFotos->id)) + { + $db->createCommand () + ->insert ('products_fotos', $fields) + ->execute (); + } + else + { + $db->createCommand () + ->update ('products_fotos', $fields, 'id = ' . $modelFotos->id) + ->execute (); + } + + if (is_file ($dir.'/fotos/' . $foto)) + { + $resizeObj = new resize ($dir.'/fotos/' . $foto); + $resizeObj->resizeImage (100, 100, 'crop'); + $resizeObj->saveImage ($dir.'/fotos/ico/' . $foto, 100); + $resizeObj->resizeImage (400, 400, 'crop'); + $resizeObj->saveImage ($dir.'/fotos/big/' . $foto, 100); + } + }*/ + + // ======================== + // ==== ХАРАКТЕРИСТИКИ ==== + // ======================== + + // есть общие характеристики, которые относятся product_id, такие как brand, gender... + // есть характеристики, которые относятся mod_id, такие как цвет, размер... + + // ==== gender ==== + + /*if (! empty ($gender)) + { + $bookGender = Book::find () + ->where ('book_alias=:book', [ + ':book' => 'gender' + ]) + ->one (); + + foreach ($gender as $filter) + { + if (! empty ($filter)) + { + $bookGenderValue = BookValue::find () + ->where (' + book_id=:book + AND book_value_title=:value + AND book_value_alias=:alias + ', [ + ':book' => $bookGender->book_id, + ':value' => $filter, + ':alias' => Translite::rusencode ($filter), + ] + ) + ->one(); + + if (! isset ($bookGenderValue->book_value_id) || empty ($bookGenderValue->book_value_id)) + { + $db->createCommand () + ->insert (BookValue::tableName (), [ + 'book_id' => $bookGender->book_id, + 'book_value_title' => $filter, + 'book_value_alias' => Translite::rusencode ($filter), + ]) + ->execute (); + + $book_value_id = Yii::$app->db->lastInsertID; + } + else + { + $book_value_id = $bookGenderValue->book_value_id; + } + + // + products_value + $db->createCommand (' + INSERT IGNORE products_value + SET + product_id = '.(int)$product_id.', + book_value_id = '.(int)$book_value_id.' + ') + ->execute (); + } + } + } + + // есть характеристики, которые относятся mod_id, такие как цвет, размер... + + // ==== destination ==== + + if (! empty ($filters)) + { + $bookDestination = Book::find () + ->where ('book_alias=:book', [ + ':book' => 'destination' + ]) + ->one (); + + foreach ($filters as $filter) + { + if (! empty ($filter)) + { + $bookDestinationValue = BookValue::find () + ->where (' + book_id=:book + AND book_value_title=:value + AND book_value_alias=:alias + ', [ + ':book' => $bookDestination->book_id, + ':value' => $filter, + ':alias' => Translite::rusencode ($filter), + ] + ) + ->one(); + + if (! isset ($bookDestinationValue->book_value_id) || empty ($bookDestinationValue->book_value_id)) + { + $db->createCommand () + ->insert (BookValue::tableName (), [ + 'book_id' => $bookDestination->book_id, + 'book_value_title' => $filter, + 'book_value_alias' => Translite::rusencode ($filter), + ]) + ->execute (); + + $book_value_id = Yii::$app->db->lastInsertID; + } + else + { + $book_value_id = $bookDestinationValue->book_value_id; + } + + if (! empty ($MOD_ARRAY)) + { + foreach ($MOD_ARRAY as $id) + { + // + products_value + $db->createCommand (' + INSERT IGNORE mod_value + SET + mod_id = '.(int)$id.', + book_value_id = '.(int)$book_value_id.' + ') + ->execute (); + } + } + } + } + } + + // ==== special ==== + + if (! empty ($filters_extra)) + { + $bookSpecial = Book::find () + ->where ('book_alias=:book', [ + ':book' => 'special' + ]) + ->one (); + + foreach ($filters_extra as $filter) + { + if (! empty ($filter)) + { + $bookSpecialValue = BookValue::find () + ->where (' + book_id=:book + AND book_value_title=:value + AND book_value_alias=:alias + ', [ + ':book' => $bookSpecial->book_id, + ':value' => $filter, + ':alias' => Translite::rusencode ($filter), + ] + ) + ->one(); + + if (! isset ($bookSpecialValue->book_value_id) || empty ($bookSpecialValue->book_value_id)) + { + $db->createCommand () + ->insert (BookValue::tableName (), [ + 'book_id' => $bookSpecial->book_id, + 'book_value_title' => $filter, + 'book_value_alias' => Translite::rusencode ($filter), + ]) + ->execute (); + + $book_value_id = Yii::$app->db->lastInsertID; + } + else + { + $book_value_id = $bookSpecialValue->book_value_id; + } + + if (! empty ($MOD_ARRAY)) + { + foreach ($MOD_ARRAY as $id) + { + // + products_value + $db->createCommand (' + INSERT IGNORE mod_value + SET + mod_id = '.(int)$id.', + book_value_id = '.(int)$book_value_id.' + ') + ->execute (); + } + } + } + } + } + + // ==== year ==== + + if (! empty ($years)) + { + $bookYear = Book::find () + ->where ('book_alias=:book', [ + ':book' => 'year' + ]) + ->one (); + + foreach ($years as $filter) + { + if (! empty ($filter)) + { + $bookYearValue = BookValue::find () + ->where (' + book_id=:book + AND book_value_title=:value + AND book_value_alias=:alias + ', [ + ':book' => $bookYear->book_id, + ':value' => $filter, + ':alias' => Translite::rusencode ($filter), + ] + ) + ->one(); + + if (! isset ($bookYearValue->book_value_id) || empty ($bookYearValue->book_value_id)) + { + $db->createCommand () + ->insert (BookValue::tableName (), [ + 'book_id' => $bookYear->book_id, + 'book_value_title' => $filter, + 'book_value_alias' => Translite::rusencode ($filter), + ]) + ->execute (); + + $book_value_id = Yii::$app->db->lastInsertID; + } + else + { + $book_value_id = $bookYearValue->book_value_id; + } + + if (! empty ($MOD_ARRAY)) + { + foreach ($MOD_ARRAY as $id) + { + // + products_value + $db->createCommand (' + INSERT IGNORE mod_value + SET + mod_id = '.(int)$id.', + book_value_id = '.(int)$book_value_id.' + ') + ->execute (); + } + } + } + } + } + + // ==== $feature ==== + + if (! empty ($feature)) + { + foreach ($feature as $string) + { + $string = str_replace([':', '.'], '', $string); + + if (! empty ($string)) + { + list ($book_title, $value_title) = explode ('*', $string); + + $book_title = trim ($book_title); + $value_title = trim ($value_title); + + if (empty ($book_title) || empty ($value_title)) + { + CONTINUE; + } + + $bookFeature = Book::find () + ->where ('book_title=:book', [ + ':book' => $book_title + ]) + ->one (); + + if (! isset ($bookFeature->book_id) || empty ($bookFeature->book_id)) + { + $db->createCommand () + ->insert (Book::tableName (), [ + 'book_title' => $book_title, + 'book_alias' => Translite::rusencode ($book_title), + ]) + ->execute (); + + $book_id = Yii::$app->db->lastInsertID; + } + else + { + $book_id = $bookFeature->book_id; + } + + $bookFeatureValue = BookValue::find () + ->where (' + book_id=:book + AND book_value_title=:value + AND book_value_alias=:alias + ', [ + ':book' => $book_id, + ':value' => $value_title, + ':alias' => Translite::rusencode ($value_title), + ] + ) + ->one(); + + if (! isset ($bookFeatureValue->book_value_id) || empty ($bookFeatureValue->book_value_id)) + { + $db->createCommand () + ->insert (BookValue::tableName (), [ + 'book_id' => $book_id, + 'book_value_title' => $value_title, + 'book_value_alias' => Translite::rusencode ($value_title), + ]) + ->execute (); + + $book_value_id = Yii::$app->db->lastInsertID; + } + else + { + $book_value_id = $bookFeatureValue->book_value_id; + } + + if (! empty ($MOD_ARRAY)) + { + foreach ($MOD_ARRAY as $id) + { + // + products_value + $db->createCommand (' + INSERT IGNORE mod_value + SET + mod_id = '.(int)$id.', + book_value_id = '.(int)$book_value_id.' + ') + ->execute (); + } + } + } + } + }*/ + + // ==== IMPORTANT ==== + + // записуем ID обработанной записи + + $_product->save(); + var_dump("$j: Product {$_product->name} saved\n"); + if ($j > 100) { + var_dump("Dev OK"); + exit; + } + } + + fclose ($handle); + } + } +} diff --git a/backend/controllers/SliderController.php b/backend/controllers/SliderController.php new file mode 100755 index 0000000..dad2406 --- /dev/null +++ b/backend/controllers/SliderController.php @@ -0,0 +1,140 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all Slider models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new SliderSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Slider model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Slider model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Slider(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->slider_id]); + } else { + + + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing Slider model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->slider_id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing Slider model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Slider model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Slider the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Slider::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/SliderImageController.php b/backend/controllers/SliderImageController.php new file mode 100755 index 0000000..a0009cd --- /dev/null +++ b/backend/controllers/SliderImageController.php @@ -0,0 +1,188 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all SliderImage models. + * @param $slider_id Slider id + * @return mixed + */ + public function actionIndex($slider_id) + { + $searchModel = new SliderImageSearch(); + $dataProvider = $searchModel->search($slider_id, Yii::$app->request->queryParams); + + return $this->render('index', [ + 'slider_id' => $slider_id, + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single SliderImage model. + * @param integer $id + * @param $slider_id Slider id + * @return mixed + */ + public function actionView($slider_id, $id) + { + return $this->render('view', [ + 'slider_id' => $slider_id, + 'model' => $this->findModel($slider_id, $id), + ]); + } + + /** + * Creates a new SliderImage model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @param $slider_id Slider id + * @return mixed + */ + public function actionCreate($slider_id) + { + $model = new SliderImage(); + + if ($model->load(Yii::$app->request->post())) { + $model->slider_id = $slider_id; + if ( ($image = UploadedFile::getInstance($model, 'image')) ) { + $model->image = $image->name; + } + if ($model->save() && $image) { + + $imgDir = Yii::getAlias('@storage/slider/'); + + if(!is_dir($imgDir)) { + mkdir($imgDir, 0755, true); + } + + $image->saveAs(Yii::getAlias('@storage/slider/' . $image->name)); + } + return $this->redirect(['view', 'slider_id'=>$slider_id, 'id' => $model->slider_image_id]); + } else { + + $slider = Slider::findOne($slider_id); + + return $this->render('create', [ + 'slider_id' => $slider_id, + 'model' => $model, + 'slider' => $slider, + ]); + } + } + + /** + * Updates an existing SliderImage model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param $slider_id Slider id + * @param integer $id + * @return mixed + */ + public function actionUpdate($slider_id, $id) + { + $model = $this->findModel($slider_id, $id); + + if ($model->load(Yii::$app->request->post())) { + + + + if ( ($image = UploadedFile::getInstance($model, 'image')) ) { + $model->image = $image->name; + } + + if(!$model->image){ + $model->image = $model->getOldAttribute('image'); + } + + if ($model->save() && $image) { + $imgDir = Yii::getAlias('@storage/slider/'); + + if(!is_dir($imgDir)) { + mkdir($imgDir, 0755, true); + } + + $image->saveAs(Yii::getAlias('@storage/slider/' . $image->name)); + } + return $this->redirect(['view', 'slider_id'=>$slider_id, 'id' => $model->slider_image_id]); + } else { + + $slider = Slider::findOne($slider_id); + return $this->render('update', [ + 'model' => $model, + 'slider_id' => $slider_id, + 'slider' => $slider, + ]); + } + } + + /** + * Deletes an existing SliderImage model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param $slider_id Slider id + * @param integer $id + * @return mixed + */ + public function actionDelete($slider_id, $id) + { + $this->findModel($slider_id, $id)->delete(); + + return $this->redirect(['index','slider_id'=>$slider_id]); + } + + /** + * Finds the SliderImage model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param $slider_id Slider id + * @param integer $id + * @return SliderImage the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($slider_id,$id) + { + if (($model = SliderImage::find()->where(['slider_image_id'=> $id, 'slider_id'=>$slider_id])->one()) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/SubscribeController.php b/backend/controllers/SubscribeController.php new file mode 100755 index 0000000..211bddf --- /dev/null +++ b/backend/controllers/SubscribeController.php @@ -0,0 +1,136 @@ +[ + 'class' => AccessBehavior::className(), + 'rules' => + ['site' => + [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ] + ] + ] + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all Subscribe models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new SubscribeSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single Subscribe model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new Subscribe model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new Subscribe(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing Subscribe model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing Subscribe model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the Subscribe model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Subscribe the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = Subscribe::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/UserController.php b/backend/controllers/UserController.php new file mode 100755 index 0000000..802358c --- /dev/null +++ b/backend/controllers/UserController.php @@ -0,0 +1,161 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + 'access' => [ + 'class' => AccessControl::className(), + 'rules' => [ + [ + 'allow' => true, +// 'actions' => ['login', 'signup'], + 'roles' => ['admin'], + ], + [ +// 'allow' => true, +// 'actions' => ['logout'], +// 'roles' => ['@'], + ], + ], + ], + ]; + } + + /** + * Lists all User models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new UserSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single User model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new User model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new User(); + if (Yii::$app->request->isAjax) { + Yii::$app->response->format = Response::FORMAT_JSON; + $model->load(Yii::$app->request->post()); + return ActiveForm::validate($model); + }else if ($model->load(Yii::$app->request->post()) && $model->validate()) { + $model->save(); + + foreach($model->role as $k => $role){ + $auth = Yii::$app->authManager; + $authorRole = $auth->getRole($role); + $auth->assign($authorRole, $model->id); + } + + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing User model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + if (Yii::$app->request->isAjax) { + Yii::$app->response->format = Response::FORMAT_JSON; + $model->load(Yii::$app->request->post()); + return ActiveForm::validate($model); + }else if ($model->load(Yii::$app->request->post()) && $model->validate()) { + + $model->save(); + + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing User model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the User model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return User the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = User::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/models/.gitkeep b/backend/models/.gitkeep new file mode 100755 index 0000000..5e4debc --- /dev/null +++ b/backend/models/.gitkeep @@ -0,0 +1 @@ +* diff --git a/backend/models/CommentSearch.php b/backend/models/CommentSearch.php new file mode 100755 index 0000000..cb831de --- /dev/null +++ b/backend/models/CommentSearch.php @@ -0,0 +1,79 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'comment_id' => $this->comment_id, + 'user_id' => $this->user_id, + 'comment_pid' => $this->comment_pid, + 'status' => $this->status, + 'date_add' => $this->date_add, + 'date_update' => $this->date_update, + 'date_delete' => $this->date_delete, + 'model_id' => $this->model_id, + ]); + + $query->andFilterWhere(['like', 'text', $this->text]) + ->andFilterWhere(['like', 'user_name', $this->user_name]) + ->andFilterWhere(['like', 'user_email', $this->user_email]) + ->andFilterWhere(['like', 'model', $this->model]); + + return $dataProvider; + } +} diff --git a/backend/models/Label.php b/backend/models/Label.php new file mode 100755 index 0000000..fbbc9f7 --- /dev/null +++ b/backend/models/Label.php @@ -0,0 +1,25 @@ +name; + } + + + + + + +} diff --git a/backend/models/LoginForm.php b/backend/models/LoginForm.php new file mode 100755 index 0000000..2e18535 --- /dev/null +++ b/backend/models/LoginForm.php @@ -0,0 +1,93 @@ +hasErrors()) { + $user = $this->getUser(); + if (!$user || !$user->validatePassword($this->password)) { + $this->addError($attribute, 'Incorrect username or password.'); + } + } + } + + /** + * Logs in a user using the provided username and password. + * + * @return boolean whether the user is logged in successfully + */ + public function login() + { + if ($this->validate()) { + return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0); + } else { + return false; + } + } + + /** + * Finds user by [[username]] + * + * @return User|null + */ + protected function getUser() + { + if ($this->_user === null) { + $this->_user = User::findByUsername($this->username); + } + + return $this->_user; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + + 'username' => 'Имя пользователя', + 'password' => 'Пароль', + 'rememberMe' => 'Запомнить пароль', + + ]; + } +} diff --git a/backend/models/Orders.php b/backend/models/Orders.php new file mode 100755 index 0000000..9bfd0bf --- /dev/null +++ b/backend/models/Orders.php @@ -0,0 +1,72 @@ +'jpg, gif, png', 'skipOnEmpty'=>true], + ]; + } + + public function attributeLabels() + { + return [ + 'id'=>'№ заказа', + 'name'=>'ФИО', + 'phone'=>'Телефон', + 'phone2'=>'Телефон 2', + 'adress'=>'Адрес', + 'body'=>'Сообщение', + 'reserve'=>'Резерв', + 'status'=>'Статус', + 'email'=>'E-mail', + 'total'=>'Сумма', + 'labels'=>'Метки', + 'label'=>'Метка', + 'comment'=>'Комментарий менеджера', + 'date_dedline'=>'Дедлайн', + 'numbercard'=>'№ карточки', + 'delivery'=>'Доставка', + 'declaration'=>'Декларация №', + 'stock'=>'№ склада', + 'consignment'=>'№ накладной', + 'payment'=>'Способ оплаты', + 'insurance'=>'Страховка', + 'amount_imposed'=>'Сумма наложенного', + 'shipping_by'=>'Отправка за счет', + 'city'=>'Город' + ]; + } + + public function beforeSave($insert) { + return parent::beforeSave($insert); + } + + public function beforeDelete() { + return parent::beforeDelete(); + } + + public function getUser() + { + return $this->hasOne(Customer::className(), ['id' => 'user_id']); + } + + + +} \ No newline at end of file diff --git a/backend/models/OrdersProducts.php b/backend/models/OrdersProducts.php new file mode 100755 index 0000000..503f311 --- /dev/null +++ b/backend/models/OrdersProducts.php @@ -0,0 +1,38 @@ +'Продукт', + 'name'=>'Вид', + 'art'=>'Артикул', + 'cost'=>'Цена за один', + 'count'=>'Кол.', + 'sum_cost'=>'Сумма', + ]; + } + + public function getMod() + { + return $this->hasOne(ProductVariant::className(), ['product_variant_id' => 'mod_id']); + } +} \ No newline at end of file diff --git a/backend/models/OrdersSearch.php b/backend/models/OrdersSearch.php new file mode 100755 index 0000000..5183ad6 --- /dev/null +++ b/backend/models/OrdersSearch.php @@ -0,0 +1,98 @@ + $query, + 'sort'=> ['defaultOrder' => ['id'=>SORT_DESC]], + 'pagination' => [ + 'pageSize' => 20, + ] + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'id' => $this->id, + 'user_id' => $this->user_id, + 'total' => $this->total, + 'date_time' => $this->date_time, + 'date_dedline' => $this->date_dedline, + 'label' => $this->label, + 'pay' => $this->pay, + 'numbercard' => $this->numbercard, + 'amount_imposed' => $this->amount_imposed, + ]); + + $query->andFilterWhere(['like', 'name', $this->name]) + ->andFilterWhere(['like', 'phone', $this->phone]) + ->andFilterWhere(['like', 'phone2', $this->phone2]) + ->andFilterWhere(['like', 'email', $this->email]) + ->andFilterWhere(['like', 'adress', $this->adress]) + ->andFilterWhere(['like', 'body', $this->body]) + ->andFilterWhere(['like', 'reserve', $this->reserve]) + ->andFilterWhere(['like', 'status', $this->status]) + ->andFilterWhere(['like', 'comment', $this->comment]) + ->andFilterWhere(['like', 'delivery', $this->delivery]) + ->andFilterWhere(['like', 'declaration', $this->declaration]) + ->andFilterWhere(['like', 'stock', $this->stock]) + ->andFilterWhere(['like', 'consignment', $this->consignment]) + ->andFilterWhere(['like', 'payment', $this->payment]) + ->andFilterWhere(['like', 'insurance', $this->insurance]) + ->andFilterWhere(['like', 'shipping_by', $this->shipping_by]) + ->andFilterWhere(['like', 'city', $this->city]); + + return $dataProvider; + } +} diff --git a/backend/models/User.php b/backend/models/User.php new file mode 100755 index 0000000..ad6e067 --- /dev/null +++ b/backend/models/User.php @@ -0,0 +1,204 @@ + 255], + [['auth_key'], 'string', 'max' => 32], + [['password_reset_token'], 'unique'], + ['email', 'unique', 'targetClass' => '\backend\models\User', 'message' => Yii::t('app','message',[ + 'field' => 'Email' + ])], + ]; + } + + + /** + * @inheritdoc + */ + public function behaviors() + { + return [ + TimestampBehavior::className(), + [ + 'class' => 'common\behaviors\ShowImage', + ], + ]; + } + + + public function beforeSave($insert) + { + $this->setPassword($this->password); + $this->generateAuthKey(); + return parent::beforeSave($insert); + } + + + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'username' => 'Username', + 'auth_key' => 'Auth Key', + 'password_hash' => 'Password Hash', + 'password_reset_token' => 'Password Reset Token', + 'email' => 'Email', + 'status' => 'Status', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + ]; + } + + + /** + * Generates "remember me" authentication key + */ + public function generateAuthKey() + { + $this->auth_key = Yii::$app->security->generateRandomString(); + } + + /** + * Generates password hash from password and sets it to the model + * + * @param string $password + */ + public function setPassword($password) + { + $this->password_hash = Yii::$app->security->generatePasswordHash($password); + } + + + + + + public function getRole(){ + return !empty($this->id) ? \Yii::$app->authManager->getRolesByUser($this->id) : ""; + } + + /** + * @inheritdoc + */ + public function getId() + { + return $this->getPrimaryKey(); + } + + /** + * @inheritdoc + */ + public function getAuthKey() + { + return $this->auth_key; + } + + /** + * @inheritdoc + */ + public function validateAuthKey($authKey) + { + return $this->getAuthKey() === $authKey; + } + + + /** + * @inheritdoc + */ + public static function findIdentityByAccessToken($token, $type = null) + { + throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.'); + } + + /** + * @inheritdoc + */ + public static function findIdentity($id) + { + return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getComments() + { + return $this->hasMany(Comment::className(), ['user_id' => 'id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getRatings() + { + return $this->hasMany(Rating::className(), ['user_id' => 'id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getShares() + { + return $this->hasMany(Share::className(), ['user_id' => 'id']); + } + + + public function getUserName() + { + return $this->username; + } + + +} diff --git a/backend/models/UserSearch.php b/backend/models/UserSearch.php new file mode 100755 index 0000000..5ac51e0 --- /dev/null +++ b/backend/models/UserSearch.php @@ -0,0 +1,76 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'id' => $this->id, + 'status' => $this->status, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + ]); + + $query->andFilterWhere(['like', 'username', $this->username]) + ->andFilterWhere(['like', 'auth_key', $this->auth_key]) + ->andFilterWhere(['like', 'password_hash', $this->password_hash]) + ->andFilterWhere(['like', 'password_reset_token', $this->password_reset_token]) + ->andFilterWhere(['like', 'email', $this->email]); + + return $dataProvider; + } +} diff --git a/backend/views/articles/_form.php b/backend/views/articles/_form.php new file mode 100755 index 0000000..f5eb6f8 --- /dev/null +++ b/backend/views/articles/_form.php @@ -0,0 +1,74 @@ + + +
+ + false, + 'options' => ['enctype' => 'multipart/form-data'] + ]); ?> + + + field($model, 'date') + ->widget(DatePicker::className(), [ + 'dateFormat' => 'yyyy-MM-dd', + 'clientOptions' => [ 'minDate' => 1 ], + ]) ?> + field($model, 'title')->textInput(['maxlength' => true]) ?> + + field($model, 'body')->widget(CKEditor::className(), + [ + 'editorOptions' => ElFinder::ckeditorOptions('elfinder',[ + 'preset' => 'full', //разработанны стандартные настройки basic, standard, full данную возможность не обязательно использовать + 'inline' => false, //по умолчанию false]), + 'filebrowserUploadUrl'=>Yii::$app->getUrlManager()->createUrl('file/uploader/images-upload') + ] + ) + ]) ?> + + + field($model, 'image')->widget(\kartik\file\FileInput::classname(), [ + 'language' => 'ru', + 'options' => [ + 'accept' => 'image/*', + 'multiple' => false, + ], + 'pluginOptions' => [ + 'allowedFileExtensions' => ['jpg', 'gif', 'png'], + 'initialPreview' => !empty($model->imageUrl) ? \common\components\artboximage\ArtboxImageHelper::getImage($model->imageUrl, 'list') : '', + 'overwriteInitial' => true, + 'showRemove' => false, + 'showUpload' => false, + 'previewFileType' => 'image', + ], + ]); ?> + + field($model, 'translit')->textInput(['maxlength' => true]) ?> + + field($model, 'meta_title')->textInput(['maxlength' => true]) ?> + + field($model, 'meta_keywords')->textInput(['maxlength' => true]) ?> + + field($model, 'meta_description')->textInput(['maxlength' => true]) ?> + + field($model, 'seo_text')->textarea(['rows' => 6]) ?> + + field($model, 'h1')->textInput(['maxlength' => true]) ?> + +
+ isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/articles/_search.php b/backend/views/articles/_search.php new file mode 100755 index 0000000..afb9cfc --- /dev/null +++ b/backend/views/articles/_search.php @@ -0,0 +1,47 @@ + + + diff --git a/backend/views/articles/create.php b/backend/views/articles/create.php new file mode 100755 index 0000000..3129639 --- /dev/null +++ b/backend/views/articles/create.php @@ -0,0 +1,21 @@ +title = 'Create Articles'; +$this->params['breadcrumbs'][] = ['label' => 'Articles', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/articles/index.php b/backend/views/articles/index.php new file mode 100755 index 0000000..f97b4d3 --- /dev/null +++ b/backend/views/articles/index.php @@ -0,0 +1,41 @@ +title = 'Articles'; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'id', + 'date', + 'title', + 'image', + // 'translit', + // 'meta_title', + // 'meta_keywords', + // 'meta_description', + // 'seo_text:ntext', + // 'h1', + + ['class' => 'yii\grid\ActionColumn'], + ], + ]); ?> +
diff --git a/backend/views/articles/update.php b/backend/views/articles/update.php new file mode 100755 index 0000000..a30c97d --- /dev/null +++ b/backend/views/articles/update.php @@ -0,0 +1,21 @@ +title = 'Update Articles: ' . $model->title; +$this->params['breadcrumbs'][] = ['label' => 'Articles', 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->title, 'url' => ['view', 'id' => $model->id]]; +$this->params['breadcrumbs'][] = 'Update'; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/articles/view.php b/backend/views/articles/view.php new file mode 100755 index 0000000..23ccbc5 --- /dev/null +++ b/backend/views/articles/view.php @@ -0,0 +1,42 @@ +title = $model->title; +$this->params['breadcrumbs'][] = ['label' => 'Articles', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->id], ['class' => 'btn btn-primary']) ?> + $model->id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => 'Are you sure you want to delete this item?', + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'id', + 'date', + 'title', + 'translit', + 'meta_title', + 'meta_keywords', + 'meta_description', + 'h1', + ], + ]) ?> + +
diff --git a/backend/views/banner/_form.php b/backend/views/banner/_form.php new file mode 100755 index 0000000..ea230cb --- /dev/null +++ b/backend/views/banner/_form.php @@ -0,0 +1,95 @@ + + + + diff --git a/backend/views/banner/_search.php b/backend/views/banner/_search.php new file mode 100755 index 0000000..4bc81e3 --- /dev/null +++ b/backend/views/banner/_search.php @@ -0,0 +1,38 @@ + + + diff --git a/backend/views/banner/create.php b/backend/views/banner/create.php new file mode 100755 index 0000000..8fbe344 --- /dev/null +++ b/backend/views/banner/create.php @@ -0,0 +1,21 @@ +title = Yii::t('app', 'Create Banner'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Banners'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> + diff --git a/backend/views/banner/index.php b/backend/views/banner/index.php new file mode 100755 index 0000000..a6ecfc8 --- /dev/null +++ b/backend/views/banner/index.php @@ -0,0 +1,37 @@ +title = Yii::t('app', 'Banners'); +$this->params['breadcrumbs'][] = $this->title; +?> + diff --git a/backend/views/banner/update.php b/backend/views/banner/update.php new file mode 100755 index 0000000..44ddca7 --- /dev/null +++ b/backend/views/banner/update.php @@ -0,0 +1,23 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'Banner', +]) . $model->title; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Banners'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->title, 'url' => ['view', 'id' => $model->banner_id]]; +$this->params['breadcrumbs'][] = Yii::t('app', 'Update'); +?> + diff --git a/backend/views/banner/view.php b/backend/views/banner/view.php new file mode 100755 index 0000000..9200c04 --- /dev/null +++ b/backend/views/banner/view.php @@ -0,0 +1,40 @@ +title = $model->title; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Banners'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> + diff --git a/backend/views/bg/_form.php b/backend/views/bg/_form.php new file mode 100755 index 0000000..4cf97c5 --- /dev/null +++ b/backend/views/bg/_form.php @@ -0,0 +1,44 @@ + + +
+ + false, + 'options' => ['enctype' => 'multipart/form-data'] + ]); ?> + + field($model, 'title')->textInput(['maxlength' => true]) ?> + + field($model, 'url')->textInput(['maxlength' => true]) ?> + + field($model, 'image')->widget(\kartik\file\FileInput::classname(), [ + 'language' => 'ru', + 'options' => [ + 'accept' => 'image/*', + 'multiple' => false, + ], + 'pluginOptions' => [ + 'allowedFileExtensions' => ['jpg', 'gif', 'png'], + 'initialPreview' => !empty($model->imageUrl) ? \common\components\artboximage\ArtboxImageHelper::getImage($model->imageUrl, 'list') : '', + 'overwriteInitial' => true, + 'showRemove' => false, + 'showUpload' => false, + 'previewFileType' => 'image', + ], + ]); ?> + +
+ isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/bg/_search.php b/backend/views/bg/_search.php new file mode 100755 index 0000000..70a8e3a --- /dev/null +++ b/backend/views/bg/_search.php @@ -0,0 +1,33 @@ + + + diff --git a/backend/views/bg/create.php b/backend/views/bg/create.php new file mode 100755 index 0000000..bf0913a --- /dev/null +++ b/backend/views/bg/create.php @@ -0,0 +1,21 @@ +title = 'Create Bg'; +$this->params['breadcrumbs'][] = ['label' => 'Bgs', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/bg/index.php b/backend/views/bg/index.php new file mode 100755 index 0000000..a5e92cd --- /dev/null +++ b/backend/views/bg/index.php @@ -0,0 +1,35 @@ +title = 'Bgs'; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'id', + 'title', + 'url:url', + 'image', + + ['class' => 'yii\grid\ActionColumn'], + ], + ]); ?> +
diff --git a/backend/views/bg/update.php b/backend/views/bg/update.php new file mode 100755 index 0000000..a996870 --- /dev/null +++ b/backend/views/bg/update.php @@ -0,0 +1,21 @@ +title = 'Update Bg: ' . $model->title; +$this->params['breadcrumbs'][] = ['label' => 'Bgs', 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->title, 'url' => ['view', 'id' => $model->id]]; +$this->params['breadcrumbs'][] = 'Update'; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/bg/view.php b/backend/views/bg/view.php new file mode 100755 index 0000000..c6f5005 --- /dev/null +++ b/backend/views/bg/view.php @@ -0,0 +1,38 @@ +title = $model->title; +$this->params['breadcrumbs'][] = ['label' => 'Bgs', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->id], ['class' => 'btn btn-primary']) ?> + $model->id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => 'Are you sure you want to delete this item?', + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'id', + 'title', + 'url:url', + 'image', + ], + ]) ?> + +
diff --git a/backend/views/blog/_form.php b/backend/views/blog/_form.php new file mode 100755 index 0000000..5f27928 --- /dev/null +++ b/backend/views/blog/_form.php @@ -0,0 +1,65 @@ + + +
+ + false, + 'options' => ['enctype' => 'multipart/form-data'] + ]); ?> + + field($model, 'name')->textInput(['maxlength' => true]) ?> + + field($model, 'link')->textInput(['maxlength' => true]) ?> + + field($model, 'description')->widget(CKEditor::className(), + [ + 'editorOptions' => ElFinder::ckeditorOptions('elfinder',[ + 'preset' => 'full', //разработанны стандартные настройки basic, standard, full данную возможность не обязательно использовать + 'inline' => false, //по умолчанию false]), + 'filebrowserUploadUrl'=>Yii::$app->getUrlManager()->createUrl('file/uploader/images-upload') + ] + ) + ]) ?> + + field($model, 'imageUpload')->widget(\kartik\file\FileInput::classname(), [ + 'language' => 'ru', + 'options' => [ + 'accept' => 'image/*', + 'multiple' => false, + ], + 'pluginOptions' => [ + 'allowedFileExtensions' => ['jpg', 'gif', 'png'], + 'initialPreview' => !empty($model->imageUrl) ? \common\components\artboximage\ArtboxImageHelper::getImage($model->imageUrl, 'list') : '', + 'overwriteInitial' => true, + 'showRemove' => false, + 'showUpload' => false, + 'previewFileType' => 'image', + ], + ]); ?> + + 'education', + 'item_id' => $model->blog_id, + 'model' => 'common\models\Blog', + 'language' => 'ru', + ]); ?> +
+ isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/blog/_search.php b/backend/views/blog/_search.php new file mode 100755 index 0000000..c3ac459 --- /dev/null +++ b/backend/views/blog/_search.php @@ -0,0 +1,43 @@ + + + diff --git a/backend/views/blog/create.php b/backend/views/blog/create.php new file mode 100755 index 0000000..54c74d2 --- /dev/null +++ b/backend/views/blog/create.php @@ -0,0 +1,21 @@ +title = 'Create Blog'; +$this->params['breadcrumbs'][] = ['label' => 'Blogs', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/blog/index.php b/backend/views/blog/index.php new file mode 100755 index 0000000..5a2716d --- /dev/null +++ b/backend/views/blog/index.php @@ -0,0 +1,40 @@ +title = 'Blogs'; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'blog_id', + 'user_id', + 'name', + 'link', + 'date_add', + // 'user_add_id', + // 'view_count', + // 'description:ntext', + // 'cover', + + ['class' => 'yii\grid\ActionColumn'], + ], + ]); ?> +
diff --git a/backend/views/blog/update.php b/backend/views/blog/update.php new file mode 100755 index 0000000..05ecebd --- /dev/null +++ b/backend/views/blog/update.php @@ -0,0 +1,21 @@ +title = 'Update Blog: ' . ' ' . $model->name; +$this->params['breadcrumbs'][] = ['label' => 'Blogs', 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->blog_id]]; +$this->params['breadcrumbs'][] = 'Update'; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/blog/view.php b/backend/views/blog/view.php new file mode 100755 index 0000000..08a4665 --- /dev/null +++ b/backend/views/blog/view.php @@ -0,0 +1,43 @@ +title = $model->name; +$this->params['breadcrumbs'][] = ['label' => 'Blogs', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->blog_id], ['class' => 'btn btn-primary']) ?> + $model->blog_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => 'Are you sure you want to delete this item?', + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'blog_id', + 'user_id', + 'name', + 'link', + 'date_add', + 'user_add_id', + 'view_count', + 'description:ntext', + 'cover', + ], + ]) ?> + +
diff --git a/backend/views/brand/_form.php b/backend/views/brand/_form.php new file mode 100755 index 0000000..7c4530d --- /dev/null +++ b/backend/views/brand/_form.php @@ -0,0 +1,57 @@ + + +
+ + false, + 'options' => ['enctype' => 'multipart/form-data'] + ]); ?> + + field($model, 'name')->textInput() ?> + + field($model, 'alias')->textInput(['maxlength' => true]) ?> + + field($model, 'image')->widget(\kartik\file\FileInput::classname(), [ + 'language' => 'ru', + 'options' => [ + 'accept' => 'image/*', + 'multiple' => false, + ], + 'pluginOptions' => [ + 'allowedFileExtensions' => ['jpg', 'gif', 'png'], + 'initialPreview' => !empty($model->imageUrl) ? \common\components\artboximage\ArtboxImageHelper::getImage($model->imageUrl, 'list') : '', + 'overwriteInitial' => true, + 'showRemove' => false, + 'showUpload' => false, + 'previewFileType' => 'image', + ], + ]); ?> + + field($model, 'meta_title')->textInput(['maxlength' => true]) ?> + + field($model, 'meta_desc')->textarea(['rows' => 6]) ?> + + field($model, 'meta_robots')->textInput(['maxlength' => true]) ?> + + field($model, 'seo_text')->textarea(['rows' => 6]) ?> + + field($model, 'in_menu')->checkbox()?> + +
+ isNewRecord ? Yii::t('product', 'Create') : Yii::t('product', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> + isNewRecord) :?> + 'create_and_new', 'class' => 'btn btn-primary']) ?> + +
+ + + +
diff --git a/backend/views/brand/_search.php b/backend/views/brand/_search.php new file mode 100755 index 0000000..ed1902f --- /dev/null +++ b/backend/views/brand/_search.php @@ -0,0 +1,41 @@ + + + diff --git a/backend/views/brand/create.php b/backend/views/brand/create.php new file mode 100755 index 0000000..7de8216 --- /dev/null +++ b/backend/views/brand/create.php @@ -0,0 +1,21 @@ +title = Yii::t('product', 'Create Brand'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Brands'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/brand/index.php b/backend/views/brand/index.php new file mode 100755 index 0000000..ad78276 --- /dev/null +++ b/backend/views/brand/index.php @@ -0,0 +1,41 @@ +title = Yii::t('product', 'Brands'); +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, +// 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'name', + 'alias', + [ + 'attribute' => 'image', + 'format' => 'image', + 'value' => function($data) { + return ArtboxImageHelper::getImageSrc($data->imageUrl, 'brand_item'); + }, + ], + + ['class' => 'yii\grid\ActionColumn'], + ], + ]); ?> +
diff --git a/backend/views/brand/update.php b/backend/views/brand/update.php new file mode 100755 index 0000000..26ae057 --- /dev/null +++ b/backend/views/brand/update.php @@ -0,0 +1,23 @@ +title = Yii::t('product', 'Update {modelClass}: ', [ + 'modelClass' => 'Brand', +]) . ' ' . $model->brand_id; +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Brands'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->brand_id, 'url' => ['view', 'id' => $model->brand_id]]; +$this->params['breadcrumbs'][] = Yii::t('product', 'Update'); +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/brand/view.php b/backend/views/brand/view.php new file mode 100755 index 0000000..ad1a066 --- /dev/null +++ b/backend/views/brand/view.php @@ -0,0 +1,42 @@ +title = $model->brand_id; +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Brands'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->brand_id], ['class' => 'btn btn-primary']) ?> + $model->brand_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('product', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'brand_id', + 'brand_name_id', + 'alias', + 'imageUrl:image', + 'meta_title', + 'meta_desc:ntext', + 'meta_robots', + 'seo_text:ntext', + ], + ]) ?> + +
diff --git a/backend/views/category/_form.php b/backend/views/category/_form.php new file mode 100755 index 0000000..68cf4c8 --- /dev/null +++ b/backend/views/category/_form.php @@ -0,0 +1,93 @@ + + +
+ + false, + 'options' => ['enctype' => 'multipart/form-data'] + ]); ?> + + field($model, 'name')->textInput() ?> + + field($model, 'alias')->textInput(['maxlength' => true]) ?> + + field($model, 'parent_id')->dropDownList($categories, [ + 'prompt' => Yii::t('rubrication', 'Root category'), + 'options' => [ + $model->category_id => ['disabled' => true] + ] + ])->label(Yii::t('product', 'Parent category')) ?> + + field($model, 'taxGroup')->widget(Select2::className(), [ + 'data' => \yii\helpers\ArrayHelper::map(\common\modules\rubrication\models\TaxGroup::find()->all(), 'tax_group_id', 'name'), + 'language' => 'ru', + 'options' => [ + 'placeholder' => 'Linked options', + 'multiple' => true, + ], + 'pluginOptions' => [ + 'allowClear' => true + ], + ] + ) ?> + + field($model, 'imageUpload')->widget(\kartik\file\FileInput::classname(), [ + 'language' => 'ru', + 'options' => [ + 'accept' => 'image/*', + 'multiple' => false, + ], + 'pluginOptions' => [ + 'allowedFileExtensions' => ['jpg', 'gif', 'png'], + 'initialPreview' => !empty($model->imageUrl) ? \common\components\artboximage\ArtboxImageHelper::getImage($model->imageUrl, 'list') : '', + 'overwriteInitial' => true, + 'showRemove' => false, + 'showUpload' => false, + 'previewFileType' => 'image', + ], + ]); ?> + + field($model, 'meta_title')->textInput(['maxlength' => true]) ?> + + field($model, 'meta_desc')->textarea(['rows' => 6]) ?> + + field($model, 'meta_robots')->textInput(['maxlength' => true]) ?> + + field($model, 'h1')->textInput(['maxlength' => true]) ?> + + field($model, 'seo_text')->widget(CKEditor::className(), + [ + 'editorOptions' => ElFinder::ckeditorOptions('elfinder',[ + 'preset' => 'full', //разработанны стандартные настройки basic, standard, full данную возможность не обязательно использовать + 'inline' => false, //по умолчанию false]), + 'filebrowserUploadUrl'=>Yii::$app->getUrlManager()->createUrl('file/uploader/images-upload') + ] + ) + ]) ?> + + depth == 2) :?> + field($model, 'populary')->checkbox() ?> + + +
+ isNewRecord ? Yii::t('product', 'Create') : Yii::t('product', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> + isNewRecord) :?> + 'create_and_new', 'class' => 'btn btn-primary']) ?> + +
+ + + +
diff --git a/backend/views/category/_search.php b/backend/views/category/_search.php new file mode 100755 index 0000000..2740e88 --- /dev/null +++ b/backend/views/category/_search.php @@ -0,0 +1,49 @@ + + + diff --git a/backend/views/category/create.php b/backend/views/category/create.php new file mode 100755 index 0000000..99357a3 --- /dev/null +++ b/backend/views/category/create.php @@ -0,0 +1,22 @@ +title = Yii::t('product', 'Create Category'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Categories'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + 'categories' => $categories + ]) ?> + +
diff --git a/backend/views/category/index.php b/backend/views/category/index.php new file mode 100755 index 0000000..66211a4 --- /dev/null +++ b/backend/views/category/index.php @@ -0,0 +1,72 @@ +title = Yii::t('product', 'Categories'); +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, +// 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + [ + 'label'=> Yii::t('product', 'Name'), + 'content'=>function($data){ + $op = []; + foreach($data->getParents()->all() as $parent) { + $op[] = $parent->name; + } + $op[] = $data->name; + return implode(' → ', $op); +// return str_repeat('-', $data->depth) .' '. $data->name; + } + ], + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{view} {update} {delete} {populary}', + 'buttons' => [ + 'populary' => function ($url, $model) { + if ($model->depth == 2) { + return Html::a('', $url, [ + 'title' => Yii::t('product', ($model->populary ? 'Set not populary' : 'Set populary')), + ]); + } + }, + ], + 'urlCreator' => function ($action, $model, $key, $index) { + switch ($action) { + case 'populary': + return \yii\helpers\Url::to(['category/populary', 'id' => $model->category_id]); + break; + case 'view': + return \yii\helpers\Url::to(['category/view', 'id' => $model->category_id]); + break; + case 'update': + return \yii\helpers\Url::to(['category/update', 'id' => $model->category_id]); + break; + case 'delete': + return \yii\helpers\Url::to(['category/delete', 'id' => $model->category_id]); + break; + } + } + ], + ], + 'panel' => [ + 'type'=>'success', + ], + ]); ?> +
diff --git a/backend/views/category/update.php b/backend/views/category/update.php new file mode 100755 index 0000000..befb58c --- /dev/null +++ b/backend/views/category/update.php @@ -0,0 +1,24 @@ +title = Yii::t('product', 'Update {modelClass}: ', [ + 'modelClass' => 'Category', +]) . ' ' . $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Categories'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->category_id]]; +$this->params['breadcrumbs'][] = Yii::t('product', 'Update'); +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + 'categories' => $categories + ]) ?> + +
diff --git a/backend/views/category/view.php b/backend/views/category/view.php new file mode 100755 index 0000000..90945f3 --- /dev/null +++ b/backend/views/category/view.php @@ -0,0 +1,52 @@ +title = $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Categories'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->category_id], ['class' => 'btn btn-primary']) ?> + $model->category_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('product', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> + 'btn btn-success']) ?> + parent_id)) :?> + $model->parent->name]), ['category/create?parent='. $model->parent->category_id], ['class' => 'btn btn-success']) ?> + +

+ + $model, + 'attributes' => [ + 'category_id', + 'parent_id', + 'path', + 'depth', + 'imageUrl:image', + 'meta_title', + 'meta_desc:ntext', + 'meta_robots', + 'h1', + 'seo_text:ntext', + 'category_name_id', + 'product_unit_id', + 'alias', + + ], + ]) ?> + +
diff --git a/backend/views/comment/_form.php b/backend/views/comment/_form.php new file mode 100755 index 0000000..efe6e86 --- /dev/null +++ b/backend/views/comment/_form.php @@ -0,0 +1,33 @@ + 'Активный', + Comment::STATUS_HIDDEN => 'Новый', + Comment::STATUS_DELETED => 'Удаленный', + ] +?> + +
+ + + + field($model, 'text') + ->textarea([ 'rows' => 6 ]) ?> + + field($model, 'status') + ->dropDownList($status_list) ?> + +
+ 'btn btn-primary' ]) ?> +
+ + + +
diff --git a/backend/views/comment/_search.php b/backend/views/comment/_search.php new file mode 100755 index 0000000..a61526e --- /dev/null +++ b/backend/views/comment/_search.php @@ -0,0 +1,49 @@ + + + diff --git a/backend/views/comment/index.php b/backend/views/comment/index.php new file mode 100755 index 0000000..3514c68 --- /dev/null +++ b/backend/views/comment/index.php @@ -0,0 +1,99 @@ +title = 'Комменты'; + $this->params[ 'breadcrumbs' ][] = $this->title; +?> +
+ +

title) ?>

+ + $dataProvider, + 'columns' => [ + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{approve} {update} {delete}', + 'buttons' => [ + 'approve' => function($url, $model, $key) { + /** + * @var Comment $model + */ + $options = array_merge([ + 'title' => "Подтвердить", + 'aria-label' => "Подтвердить", + 'data-confirm' => "Комментарий и оценка отобразится на публичной части сайта, подтвердить?", + 'data-method' => 'post', + 'data-pjax' => '0', + ]); + $glyphicon = 'glyphicon-ok'; + if($model->status == $model::STATUS_ACTIVE) { + $url = Url::to(['comment/disapprove', 'id' => $model->comment_id]); + $glyphicon = 'glyphicon-remove'; + } + return Html::a('', $url, $options); + } + ] + ], + 'comment_id', + [ + 'attribute' => 'rating.value', + 'label' => 'Оценка', + ], + 'text:ntext', + [ + 'content' => function($model) { + /** + * @var Comment $model + */ + if(!empty( $model->user )) { + return $model->user->username . " (ID: " . $model->user->id . ")"; + } else { + return $model->user_name . " (Гость: " . $model->user_email . ")"; + } + }, + 'label' => 'Пользователь', + ], + [ + 'attribute' => 'status', + 'value' => function($model) { + /** + * @var Comment $model + */ + $status = ''; + switch($model->status) { + case Comment::STATUS_ACTIVE: + $status = 'Активный'; + break; + case Comment::STATUS_HIDDEN: + $status = 'Новый'; + break; + case Comment::STATUS_DELETED: + $status = 'Удаленный'; + break; + default: + $status = 'Неизвестно'; + }; + return $status; + }, + ], + 'date_add', + [ + 'attribute' => 'model', + 'value' => function($model) { + /** + * @var Comment $model + */ + return $model->model . " (ID: " . $model->model_id . ")"; + }, + ], + ], + ]); ?> +
diff --git a/backend/views/comment/update.php b/backend/views/comment/update.php new file mode 100755 index 0000000..3c96c8f --- /dev/null +++ b/backend/views/comment/update.php @@ -0,0 +1,21 @@ +title = 'Редактировать коммент: ' . $model->comment_id; +$this->params['breadcrumbs'][] = ['label' => 'Комментарии', 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->comment_id, 'url' => ['view', 'id' => $model->comment_id]]; +$this->params['breadcrumbs'][] = 'Редактировать'; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/comment/view.php b/backend/views/comment/view.php new file mode 100755 index 0000000..1af38ca --- /dev/null +++ b/backend/views/comment/view.php @@ -0,0 +1,46 @@ +title = $model->comment_id; +$this->params['breadcrumbs'][] = ['label' => 'Comments', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->comment_id], ['class' => 'btn btn-primary']) ?> + $model->comment_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => 'Are you sure you want to delete this item?', + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'comment_id', + 'text:ntext', + 'user_id', + 'user_name', + 'user_email:email', + 'comment_pid', + 'status', + 'date_add', + 'date_update', + 'date_delete', + 'model', + 'model_id', + ], + ]) ?> + +
diff --git a/backend/views/customer/_form.php b/backend/views/customer/_form.php new file mode 100755 index 0000000..1170648 --- /dev/null +++ b/backend/views/customer/_form.php @@ -0,0 +1,44 @@ + + +
+ + + + + field($model, 'username')->textInput(['maxlength' => true]) ?> + + + + field($model, 'name')->textInput(['maxlength' => true]) ?> + + field($model, 'surname')->textInput(['maxlength' => true]) ?> + + field($model, 'phone')->textInput(['maxlength' => true]) ?> + + field($model, 'date_time')->textInput() ?> + + field($model, 'birth_day')->textInput() ?> + + field($model, 'birth_month')->textInput() ?> + + field($model, 'birth_year')->textInput() ?> + + field($model, 'body')->textarea(['rows' => 6]) ?> + + field($model, 'group_id')->textInput() ?> + +
+ isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/customer/_search.php b/backend/views/customer/_search.php new file mode 100755 index 0000000..3a462e9 --- /dev/null +++ b/backend/views/customer/_search.php @@ -0,0 +1,51 @@ + + + diff --git a/backend/views/customer/create.php b/backend/views/customer/create.php new file mode 100755 index 0000000..45796e5 --- /dev/null +++ b/backend/views/customer/create.php @@ -0,0 +1,21 @@ +title = 'Create Customer'; +$this->params['breadcrumbs'][] = ['label' => 'Customers', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/customer/index.php b/backend/views/customer/index.php new file mode 100755 index 0000000..40909ae --- /dev/null +++ b/backend/views/customer/index.php @@ -0,0 +1,43 @@ +title = 'Customers'; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'id', + 'username', + 'name', + 'surname', + // 'phone', + // 'date_time', + // 'sex', + // 'birth_day', + // 'birth_month', + // 'birth_year', + // 'body:ntext', + // 'group_id', + + ['class' => 'yii\grid\ActionColumn'], + ], + ]); ?> +
diff --git a/backend/views/customer/update.php b/backend/views/customer/update.php new file mode 100755 index 0000000..360c058 --- /dev/null +++ b/backend/views/customer/update.php @@ -0,0 +1,21 @@ +title = 'Update Customer: ' . $model->name; +$this->params['breadcrumbs'][] = ['label' => 'Customers', 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->id]]; +$this->params['breadcrumbs'][] = 'Update'; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/customer/view.php b/backend/views/customer/view.php new file mode 100755 index 0000000..c070573 --- /dev/null +++ b/backend/views/customer/view.php @@ -0,0 +1,47 @@ +title = $model->name; +$this->params['breadcrumbs'][] = ['label' => 'Customers', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->id], ['class' => 'btn btn-primary']) ?> + $model->id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => 'Are you sure you want to delete this item?', + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'id', + 'username', + 'password', + 'name', + 'surname', + 'phone', + 'date_time', + 'sex', + 'birth_day', + 'birth_month', + 'birth_year', + 'body:ntext', + 'group_id', + ], + ]) ?> + +
diff --git a/backend/views/event/_form.php b/backend/views/event/_form.php new file mode 100755 index 0000000..a78ef21 --- /dev/null +++ b/backend/views/event/_form.php @@ -0,0 +1,109 @@ + + +
+ + false, + 'options' => ['enctype' => 'multipart/form-data'] + ]); ?> + + field($model, 'event_id')->textInput(['maxlength' => true, 'disabled'=>true]) ?> + + field($model, 'name')->textInput(['maxlength' => true]) ?> + + field($model, 'alias')->textInput(['maxlength' => true]) ?> + + field($model, 'body')->widget(CKEditor::className(), + [ + 'editorOptions' => ElFinder::ckeditorOptions('elfinder',[ + 'preset' => 'full', //разработанны стандартные настройки basic, standard, full данную возможность не обязательно использовать + 'inline' => false, //по умолчанию false]), + 'filebrowserUploadUrl'=>Yii::$app->getUrlManager()->createUrl('file/uploader/images-upload') + ] + ) + ]) ?> + + + field($model, 'end_at') + ->widget(DatePicker::className(), [ + 'pluginOptions' => [ + 'todayHighlight' => true, + 'format' => 'yyyy-mm-dd', + ]]) ?> + + + field($model, 'imageUpload')->widget(\kartik\file\FileInput::classname(), [ + 'language' => 'ru', + 'options' => [ + 'accept' => 'image/*', + 'multiple' => false, + ], + 'pluginOptions' => [ + 'allowedFileExtensions' => ['jpg', 'gif', 'png'], + 'initialPreview' => !empty($model->imageUrl) ? \common\components\artboximage\ArtboxImageHelper::getImage($model->imageUrl, 'list') : '', + 'deleteUrl' => \yii\helpers\Url::to(['/product/manage/delimg', 'id' => $model->primaryKey]), + 'initialPreviewConfig' => $model->getImagesConfig(), + 'overwriteInitial' => true, + 'showUpload' => false, + 'previewFileType' => 'image', + ], + ]); ?> + + + field($model, 'banner')->widget(\kartik\file\FileInput::classname(), [ + 'language' => 'ru', + 'options' => [ + 'accept' => 'image/*', + 'multiple' => false, + ], + 'pluginOptions' => [ + 'allowedFileExtensions' => ['jpg', 'gif', 'png'], + 'initialPreview' => !empty($model->getImageUrl('banner')) ? \common\components\artboximage\ArtboxImageHelper::getImage($model->getImageUrl('banner'), 'list') : '', + 'deleteUrl' => \yii\helpers\Url::to(['/product/manage/delimg', 'id' => $model->primaryKey]), + 'initialPreviewConfig' => $model->getImagesConfig('banner'), + 'overwriteInitial' => true, + 'showUpload' => false, + 'previewFileType' => 'image', + ], + ]); ?> + + field($model, 'products_file')->widget(\kartik\file\FileInput::classname(), [ + 'language' => 'ru' + ]); ?> + + + field($model, 'meta_title')->textInput(['maxlength' => true]) ?> + + field($model, 'description')->textInput(['maxlength' => true]) ?> + + field($model, 'h1')->textInput(['maxlength' => true]) ?> + + field($model, 'seo_text')->textarea(['rows' => 6]) ?> + + field($model, 'status')->checkbox() ?> + + field($model, 'sale')->checkbox() ?> + + field($model, 'is_event')->checkbox() ?> + + field($model, 'percent')->textInput() ?> + + + +
+ isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/event/_search.php b/backend/views/event/_search.php new file mode 100755 index 0000000..c60ba39 --- /dev/null +++ b/backend/views/event/_search.php @@ -0,0 +1,49 @@ + + + diff --git a/backend/views/event/create.php b/backend/views/event/create.php new file mode 100755 index 0000000..7909eca --- /dev/null +++ b/backend/views/event/create.php @@ -0,0 +1,21 @@ +title = Yii::t('app', 'Create Event'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Events'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/event/index.php b/backend/views/event/index.php new file mode 100755 index 0000000..b87b7b9 --- /dev/null +++ b/backend/views/event/index.php @@ -0,0 +1,45 @@ +title = Yii::t('app', 'Events'); +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'event_id', + 'name', + 'alias', + [ + 'format' => 'image', + 'attribute'=>'image', + ], + // 'meta_title', + // 'description', + // 'h1', + // 'seo_text:ntext', + // 'created_at', + // 'updated_at', + // 'end_at', + + ['class' => 'yii\grid\ActionColumn'], + ], + ]); ?> +
diff --git a/backend/views/event/update.php b/backend/views/event/update.php new file mode 100755 index 0000000..9009f4d --- /dev/null +++ b/backend/views/event/update.php @@ -0,0 +1,23 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'Event', +]) . $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Events'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->event_id]]; +$this->params['breadcrumbs'][] = Yii::t('app', 'Update'); +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/event/view.php b/backend/views/event/view.php new file mode 100755 index 0000000..d33ceb4 --- /dev/null +++ b/backend/views/event/view.php @@ -0,0 +1,40 @@ +title = $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Events'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->event_id], ['class' => 'btn btn-primary']) ?> + $model->event_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'event_id', + 'name', + 'alias', + 'meta_title', + 'description', + 'h1', + ], + ]) ?> + +
diff --git a/backend/views/feedback/index.php b/backend/views/feedback/index.php new file mode 100755 index 0000000..fbe1921 --- /dev/null +++ b/backend/views/feedback/index.php @@ -0,0 +1,33 @@ +title = 'Feedback'; + $this->params['breadcrumbs'][] = $this->title; +?> + \ No newline at end of file diff --git a/backend/views/layouts/admin.php b/backend/views/layouts/admin.php new file mode 100755 index 0000000..98501f4 --- /dev/null +++ b/backend/views/layouts/admin.php @@ -0,0 +1,34 @@ +beginContent('@app/views/layouts/main.php'); +?> + + render('header') ?> + + render('main-sidebar') ?> + + +
+
+ isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], + ]) ?> + + + +
+
+ render('footer') ?> + + + + + render('control-sidebar') ?> + + +
+endContent() ?> \ No newline at end of file diff --git a/backend/views/layouts/control-sidebar.php b/backend/views/layouts/control-sidebar.php new file mode 100755 index 0000000..4eb13ba --- /dev/null +++ b/backend/views/layouts/control-sidebar.php @@ -0,0 +1,188 @@ + \ No newline at end of file diff --git a/backend/views/layouts/footer.php b/backend/views/layouts/footer.php new file mode 100755 index 0000000..e66222f --- /dev/null +++ b/backend/views/layouts/footer.php @@ -0,0 +1,3 @@ +
+ +
\ No newline at end of file diff --git a/backend/views/layouts/header.php b/backend/views/layouts/header.php new file mode 100755 index 0000000..079eb84 --- /dev/null +++ b/backend/views/layouts/header.php @@ -0,0 +1,35 @@ + +
+ + + + +
\ No newline at end of file diff --git a/backend/views/layouts/main-sidebar.php b/backend/views/layouts/main-sidebar.php new file mode 100755 index 0000000..23d7844 --- /dev/null +++ b/backend/views/layouts/main-sidebar.php @@ -0,0 +1,220 @@ + + \ No newline at end of file diff --git a/backend/views/layouts/main.php b/backend/views/layouts/main.php new file mode 100755 index 0000000..0ef86f0 --- /dev/null +++ b/backend/views/layouts/main.php @@ -0,0 +1,34 @@ + +beginPage() ?> + + + + + + + <?= Html::encode($this->title) ?> + head() ?> + + +beginBody() ?> +
+ + + +
+ +endBody() ?> + + +endPage() ?> diff --git a/backend/views/layouts/none.php b/backend/views/layouts/none.php new file mode 100755 index 0000000..de536ad --- /dev/null +++ b/backend/views/layouts/none.php @@ -0,0 +1,9 @@ +beginContent('@app/views/layouts/main.php'); +?> + + + +endContent() ?> \ No newline at end of file diff --git a/backend/views/orders/_form.php b/backend/views/orders/_form.php new file mode 100755 index 0000000..6579e53 --- /dev/null +++ b/backend/views/orders/_form.php @@ -0,0 +1,66 @@ + + + +
+
+ + + field($model, 'name') ?> + + + field($model, 'phone') ?> + + field($model, 'phone2') ?> + + field($model, 'email') ?> + + field($model, 'numbercard') ?> + + field($model, 'body')->textArea(['rows' => '3']) ?> +field($model, 'delivery')->dropDownList(ArrayHelper::map(Delivery::find()->asArray()->all(), 'id', 'title')) ?> + field($model, 'declaration') ?> + + field($model, 'stock') ?> + + field($model, 'consignment') ?> +
+
+ + field($model, 'payment')->dropDownList(['Оплатить наличными'=>'Оплатить наличными','Оплатить на карту Приват Банка'=>'Оплатить на карту Приват Банка','Оплатить по безналичному расчету'=>'Оплатить по безналичному расчету','Оплатить Правекс-телеграф'=>'Оплатить Правекс-телеграф','Наложенным платежом'=>'Наложенным платежом'],['prompt'=>'...']); ?> + + field($model, 'insurance') ?> + + field($model, 'amount_imposed') ?> + + field($model, 'shipping_by') ?> + + field($model, 'city') ?> + + field($model, 'adress') ?> + + + field($model, 'total') ?> + + field($model, 'status')->dropDownList(['Нет'=>'Нет','Обработан'=>'Обработан','На комплектации'=>'На комплектации','Укомплектован'=>'Укомплектован','Доставка'=>'Доставка','Выполнен'=>'Выполнен','Резерв оплачен'=>'Резерв оплачен','Резерв неоплачен'=>'Резерв неоплачен'],['prompt'=>'...']); ?> + + field($model, 'comment')->textArea(['rows' => '3']) ?> +
+
+
+ isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + diff --git a/backend/views/orders/add.php b/backend/views/orders/add.php new file mode 100755 index 0000000..912df76 --- /dev/null +++ b/backend/views/orders/add.php @@ -0,0 +1,30 @@ +title = 'Добавить товар в заказ'; +$this->params['breadcrumbs'][] = $this->title; +?> +

Добавить товар в заказ

+ + 'reg-form', + 'options' => ['class' => 'form-vertical','enctype' => 'multipart/form-data'], + 'fieldConfig' => [ + //'template' => "{label}\n
{input}
\n
{error}
", + //'labelOptions' => ['class' => 'col-lg-2 control-label'], + ], + ]); ?> + +field($model, 'art') ?> + +field($model, 'count') ?> + + field($model, 'order_id')->hiddenInput(['value'=>$_GET['order_id']])->label(false); ?> + +
+ 'btn btn-primary', 'name' => 'login-button']) ?> +
+ \ No newline at end of file diff --git a/backend/views/orders/create.php b/backend/views/orders/create.php new file mode 100755 index 0000000..15d213f --- /dev/null +++ b/backend/views/orders/create.php @@ -0,0 +1,19 @@ +title = 'Добавить товар в заказ'; +$this->params['breadcrumbs'][] = ['label' => 'Pages', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> + +
+

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> +
+ diff --git a/backend/views/orders/index.php b/backend/views/orders/index.php new file mode 100755 index 0000000..9907dcc --- /dev/null +++ b/backend/views/orders/index.php @@ -0,0 +1,103 @@ +title = 'Заказы'; +$this->params['breadcrumbs'][] = $this->title; +?> +

Заказы

+

+ 'btn btn-success']) ?> +

+ + $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + + [ + 'attribute' => 'id', + 'format' => 'raw', + 'options' => ['class' => 'btn btn-warning'], + 'value' => function($model){ + return Html::button($model->id, ['id'=>$model->id, 'class' => 'btn btn-warning']); + + } + + ], + [ + 'attribute' => 'date_time', + 'value'=>'date_time', + ], + + [ + 'attribute' => 'name', + 'value'=>'name', + 'format'=>'raw', + ], + [ + 'attribute' => 'phone', + 'value'=>'phone', + ], + [ + 'attribute' => 'total', + 'value'=>'total', + ], + [ + 'filter' => yii\helpers\ArrayHelper::map(Label::find()->orderBy('id')->asArray()->all(), 'id', 'label'), + 'attribute' => 'label', + 'value' => function ($model, $key, $index, $column) { + return Html::activeDropDownList($model, 'label', + yii\helpers\ArrayHelper::map(Label::find()->orderBy('id')->asArray()->all(), 'id', 'label'), + [ + 'prompt' => 'Нет', + 'onchange' => "$.ajax({ + url: \"/admin/orders/labelupdate\", + type: \"post\", + data: { order_id: $model->id, label_id : this.value}, + });" + ] + + ); + }, + 'format' => 'raw', + ], + [ + 'attribute' => 'pay', + 'filter' => [ + 0 => 'Нет',1=>'Да' + ], + 'value' => function ($model, $key, $index, $column) { + return Html::activeDropDownList($model, 'pay',[0 => 'Нет',1=>'Да'], + [ + 'onchange' => "$.ajax({ + url: \"/admin/orders/payupdate\", + type: \"post\", + data: { order_id: $model->id, pay_id : this.value}, + });" + ] + + ); + }, + 'format' => 'raw', + ], + [ + 'attribute' => 'status', + 'value'=>'status', + 'contentOptions'=>['style'=>'width: 5px;'] + ], + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{delete}', + 'contentOptions'=>['style'=>'width: 70px;'] + ], + ], +]) ?> + \ No newline at end of file diff --git a/backend/views/orders/show.php b/backend/views/orders/show.php new file mode 100755 index 0000000..75abacb --- /dev/null +++ b/backend/views/orders/show.php @@ -0,0 +1,194 @@ +title = 'Заказ №'.$model->id; +// $this->params['breadcrumbs'][] = $this->title; +?> +
+ + + + + +
+ Заказ успешно сохранен! +
+ + + 'reg-form', + 'layout' => 'horizontal', + 'options' => ['enctype' => 'multipart/form-data'], + 'fieldConfig' => [ + //'template' => "{label}\n
{input}
\n
{error}
", + //'labelOptions' => ['class' => 'col-lg-2 control-label'], + ], + 'action' => [ + 'orders/show', + 'id' => $model->id + ] + ]); ?> + +
+
+
+
Заказ №id?>
+ + date_time?> +
+ + field($model, 'date_dedline') + ->widget(DatePicker::className(), [ + 'pluginOptions' => [ + 'format' => 'dd-M-yyyy', + 'todayHighlight' => true + ]]) ?> + +field($model, 'name') ?> + + +field($model, 'phone') ?> + +field($model, 'phone2') ?> + +field($model, 'email') ?> + +field($model, 'numbercard') ?> + + field($model, 'body')->textArea(['rows' => '3']) ?> +
+
+ field($model, 'delivery')->dropDownList(ArrayHelper::map(Delivery::find()->asArray()->all(), 'id', 'title')) ?> + + field($model, 'declaration') ?> + + field($model, 'stock') ?> + + field($model, 'consignment') ?> + +field($model, 'payment')->dropDownList(['Оплатить наличными'=>'Оплатить наличными','Оплатить на карту Приват Банка'=>'Оплатить на карту Приват Банка','Оплатить по безналичному расчету'=>'Оплатить по безналичному расчету','Оплатить Правекс-телеграф'=>'Оплатить Правекс-телеграф','Наложенным платежом'=>'Наложенным платежом'],['prompt'=>'...']); ?> + +field($model, 'insurance') ?> + +field($model, 'amount_imposed') ?> + +field($model, 'shipping_by') ?> + +field($model, 'city') ?> + +field($model, 'adress') ?> + + +field($model, 'total') ?> + +field($model, 'status')->dropDownList(['Нет'=>'Нет','Обработан'=>'Обработан','На комплектации'=>'На комплектации','Укомплектован'=>'Укомплектован','Доставка'=>'Доставка','Выполнен'=>'Выполнен','Резерв оплачен'=>'Резерв оплачен','Резерв неоплачен'=>'Резерв неоплачен'],['prompt'=>'...']); ?> + +field($model, 'comment')->textArea(['rows' => '3']) ?> +
+ +
+  + + + $dataProvider, + 'columns' => [ + [ + 'attribute' => 'id', + 'value'=>'id', + 'contentOptions'=>['style'=>'width: 70px;'] + ], + [ + 'attribute' => 'sku', + 'value'=>'sku', + 'contentOptions'=>['style'=>'width: 50px;'] + ], + [ + 'attribute' => 'product_name', + 'value'=>'product_name', + 'contentOptions'=>['style'=>'max-width: 300px;'] + ], +// [ +// 'attribute' => 'size', +// 'value'=>'mod.size', +// 'contentOptions'=>['style'=>'width: 100px;'] +// ], +// [ +// 'attribute' => 'size', +// 'value'=>'mod.color', +// 'contentOptions'=>['style'=>'width: 100px;'] +// ], + [ + 'attribute' => 'price', + 'value'=>'price', + 'contentOptions'=>['style'=>'width: 100px;'] + ], + [ + 'attribute' => 'count', + 'value'=>'count', + 'contentOptions'=>['style'=>'width: 30px;'] + ], + [ + 'attribute' => 'sum_cost', + 'value'=>'sum_cost', + 'contentOptions'=>['style'=>'width: 100px;'] + ], + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{delete}', + 'contentOptions'=>['style'=>'width: 20px;'], + 'buttons' => [ + 'delete' => function ($url, $model) { + return Html::a('', ['/admin/orders/delete_product','id'=>$model->id,'order_id'=>$_GET['id']], + [ + 'title' => "Удалить",'data-confirm'=>'Удалить?', + ]); + } + ], + ], + + ], +]) ?> +
+ 'btn btn-primary btn-lg btn-block', 'name' => 'login-button']) ?> +
+ + + +
+
+

Добавить товар в заказ

+ + false, + 'id' => 'add_mod', + 'options' => ['class' => 'form-vertical','enctype' => 'multipart/form-data'], + 'fieldConfig' => [ + //'template' => "{label}\n
{input}
\n
{error}
", + //'labelOptions' => ['class' => 'col-lg-2 control-label'], + ], + ]); ?> + + field($model_orderproducts, 'sku') ?> + + field($model_orderproducts, 'count') ?> + + field($model_orderproducts, 'order_id')->hiddenInput(['value'=>$model->id])->label(false); ?> + +
+ 'btn btn-primary', 'name' => 'login-button']) ?> +
+ +
+ +
+ + + diff --git a/backend/views/orders/update.php b/backend/views/orders/update.php new file mode 100755 index 0000000..e255d66 --- /dev/null +++ b/backend/views/orders/update.php @@ -0,0 +1,144 @@ +title = 'Заказ №'.$model->id; +$this->params['breadcrumbs'][] = $this->title; +?> +

Заказ №id?>

+ + +
+ Заказ успешно сохранен! +
+ + + 'reg-form', + 'layout' => 'horizontal', + 'options' => ['enctype' => 'multipart/form-data'], + 'fieldConfig' => [ + //'template' => "{label}\n
{input}
\n
{error}
", + //'labelOptions' => ['class' => 'col-lg-2 control-label'], + ], + ]); ?> + + +
+
+ + date_time?> +
+field($model,'date_dedline')->widget(\yii\jui\DatePicker::className(),['clientOptions' => [],'options' => ['class'=>'form-control','style'=>'width:150px;'],'dateFormat' => 'yyyy-MM-dd',]) ?> + +field($model, 'surname') ?> + +field($model, 'name') ?> + +field($model, 'patronymic') ?> + +field($model, 'phone') ?> + +field($model, 'phone2') ?> + +field($model, 'email') ?> + +field($model, 'numbercard') ?> + +field($model, 'delivery')->dropDownList(ArrayHelper::map(Delivery::find()->asArray()->all(), 'id', 'title')) ?> + +field($model, 'declaration') ?> + +field($model, 'stock') ?> + +field($model, 'consignment') ?> +
+
+field($model, 'payment')->dropDownList(['Оплатить наличными'=>'Оплатить наличными','Оплатить на карту Приват Банка'=>'Оплатить на карту Приват Банка','Оплатить по безналичному расчету'=>'Оплатить по безналичному расчету','Оплатить Правекс-телеграф'=>'Оплатить Правекс-телеграф','Наложенным платежом'=>'Наложенным платежом'],['prompt'=>'...']); ?> + +field($model, 'insurance') ?> + +field($model, 'amount_imposed') ?> + +field($model, 'shipping_by') ?> + +field($model, 'city') ?> + +field($model, 'adress') ?> + +field($model, 'body')->textArea(['rows' => '6']) ?> + +field($model, 'total') ?> + +field($model, 'status')->dropDownList(['Нет'=>'Нет','Обработан'=>'Обработан','На комплектации'=>'На комплектации','Укомплектован'=>'Укомплектован','Доставка'=>'Доставка','Выполнен'=>'Выполнен','Резерв оплачен'=>'Резерв оплачен','Резерв неоплачен'=>'Резерв неоплачен'],['prompt'=>'...']); ?> + +field($model, 'comment')->textArea(['rows' => '6']) ?> +
+
+ 'btn btn-primary btn-lg btn-block', 'name' => 'login-button']) ?> +
+ + +
+$model->id], ['class'=>'btn btn-success']) ?> + $dataProvider, + 'columns' => [ + [ + 'attribute' => 'id', + 'value'=>'id', + 'contentOptions'=>['style'=>'width: 70px;'] + ], + [ + 'attribute' => 'art', + 'value'=>'art', + 'contentOptions'=>['style'=>'width: 50px;'] + ], + [ + 'attribute' => 'product_name', + 'value'=>'product_name', + //'contentOptions'=>['style'=>'max-width: 300px;'] + ], + [ + 'attribute' => 'name', + 'value'=>'name', + //'contentOptions'=>['style'=>'max-width: 300px;'] + ], + [ + 'attribute' => 'cost', + 'value'=>'cost', + 'contentOptions'=>['style'=>'width: 100px;'] + ], + [ + 'attribute' => 'count', + 'value'=>'count', + 'contentOptions'=>['style'=>'width: 30px;'] + ], + [ + 'attribute' => 'sum_cost', + 'value'=>'sum_cost', + 'contentOptions'=>['style'=>'width: 100px;'] + ], + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{delete}', + 'contentOptions'=>['style'=>'width: 20px;'], + 'buttons' => [ + 'delete' => function ($url, $model) { + return Html::a('', ['/admin/orders/delete_product','id'=>$model->id,'order_id'=>$_GET['id']], + [ + 'title' => "Удалить",'data-confirm'=>'Удалить?', + ]); + } + ], + ], + + ], +]) ?> + + + diff --git a/backend/views/page/_form.php b/backend/views/page/_form.php new file mode 100755 index 0000000..feaee5d --- /dev/null +++ b/backend/views/page/_form.php @@ -0,0 +1,47 @@ + + +
+ + + + field($model, 'title')->textInput(['maxlength' => true]) ?> + + field($model, 'translit')->textInput(['maxlength' => true]) ?> + + field($model, 'body')->widget(CKEditor::className(), + [ + 'editorOptions' => ElFinder::ckeditorOptions('elfinder',[ + 'preset' => 'full', //разработанны стандартные настройки basic, standard, full данную возможность не обязательно использовать + 'inline' => false, //по умолчанию false]), + 'allowedContent' => true, + 'filebrowserUploadUrl'=>Yii::$app->getUrlManager()->createUrl('file/uploader/images-upload') + ] + ) + ]) ?> + + field($model, 'meta_title')->textInput(['maxlength' => true]) ?> + + field($model, 'meta_keywords')->textInput(['maxlength' => true]) ?> + + field($model, 'meta_description')->textInput(['maxlength' => true]) ?> + + field($model, 'seo_text')->textarea(['rows' => 6]) ?> + + field($model, 'h1')->textInput(['maxlength' => true]) ?> + +
+ isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/page/_search.php b/backend/views/page/_search.php new file mode 100755 index 0000000..088e081 --- /dev/null +++ b/backend/views/page/_search.php @@ -0,0 +1,43 @@ + + + diff --git a/backend/views/page/create.php b/backend/views/page/create.php new file mode 100755 index 0000000..d47a8ad --- /dev/null +++ b/backend/views/page/create.php @@ -0,0 +1,21 @@ +title = 'Create Page'; +$this->params['breadcrumbs'][] = ['label' => 'Pages', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/page/index.php b/backend/views/page/index.php new file mode 100755 index 0000000..a1dd24c --- /dev/null +++ b/backend/views/page/index.php @@ -0,0 +1,39 @@ +title = 'Pages'; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'id', + 'translit', + 'title', + 'meta_title', + // 'meta_keywords', + // 'meta_description', + // 'seo_text:ntext', + // 'h1', + + ['class' => 'yii\grid\ActionColumn'], + ], + ]); ?> +
diff --git a/backend/views/page/update.php b/backend/views/page/update.php new file mode 100755 index 0000000..a6755db --- /dev/null +++ b/backend/views/page/update.php @@ -0,0 +1,21 @@ +title = 'Update Page: ' . $model->title; +$this->params['breadcrumbs'][] = ['label' => 'Pages', 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->title, 'url' => ['view', 'id' => $model->id]]; +$this->params['breadcrumbs'][] = 'Update'; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/page/view.php b/backend/views/page/view.php new file mode 100755 index 0000000..6ddfed8 --- /dev/null +++ b/backend/views/page/view.php @@ -0,0 +1,43 @@ +title = $model->title; +$this->params['breadcrumbs'][] = ['label' => 'Pages', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->id], ['class' => 'btn btn-primary']) ?> + $model->id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => 'Are you sure you want to delete this item?', + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'id', + 'translit', + 'title', + 'body:ntext', + 'meta_title', + 'meta_keywords', + 'meta_description', + 'seo_text:ntext', + 'h1', + ], + ]) ?> + +
diff --git a/backend/views/seo-category/_form.php b/backend/views/seo-category/_form.php new file mode 100755 index 0000000..ead4d86 --- /dev/null +++ b/backend/views/seo-category/_form.php @@ -0,0 +1,27 @@ + + +
+ + + + field($model, 'name')->textInput(['maxlength' => true]) ?> + + field($model, 'controller')->textInput(['maxlength' => true]) ?> + + field($model, 'status')->textInput() ?> + +
+ isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/seo-category/_search.php b/backend/views/seo-category/_search.php new file mode 100755 index 0000000..9f4264f --- /dev/null +++ b/backend/views/seo-category/_search.php @@ -0,0 +1,33 @@ + + + diff --git a/backend/views/seo-category/create.php b/backend/views/seo-category/create.php new file mode 100755 index 0000000..7729b68 --- /dev/null +++ b/backend/views/seo-category/create.php @@ -0,0 +1,21 @@ +title = Yii::t('app', 'Create Seo Category'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Seo Categories'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/seo-category/index.php b/backend/views/seo-category/index.php new file mode 100755 index 0000000..70f5bb0 --- /dev/null +++ b/backend/views/seo-category/index.php @@ -0,0 +1,72 @@ +title = Yii::t('app', 'Seo Categories'); +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'seo_category_id', + 'name', + 'controller', + 'status', + + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{update} {image} {delete}', + 'buttons' => [ + 'update' => function ($url, $model) + { + return Html::a ( + '', + Url::toRoute(['seo-category/update', 'id' => $model->seo_category_id]), + [ + 'title' => "Редактировать", + ] + ); + }, + 'image' => function ($url, $model) + { + return Html::a ( + '', + Url::toRoute(['seo-dynamic/index', 'seo_category_id' => $model->seo_category_id]), + [ + 'title' => "Список", + ] + ); + }, + 'delete' => function ($url, $model) + { + return Html::a ( + '', + Url::toRoute(['seo-category/delete', 'id' => $model->seo_category_id]), + [ + 'title' => "Удалить", + ] + ); + }, + ], + 'contentOptions' => ['style' => 'width: 70px;'], + ], + ], + ]); ?> +
diff --git a/backend/views/seo-category/update.php b/backend/views/seo-category/update.php new file mode 100755 index 0000000..34b49fb --- /dev/null +++ b/backend/views/seo-category/update.php @@ -0,0 +1,23 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'Seo Category', +]) . $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Seo Categories'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->seo_category_id]]; +$this->params['breadcrumbs'][] = Yii::t('app', 'Update'); +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/seo-category/view.php b/backend/views/seo-category/view.php new file mode 100755 index 0000000..842e78b --- /dev/null +++ b/backend/views/seo-category/view.php @@ -0,0 +1,38 @@ +title = $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Seo Categories'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->seo_category_id], ['class' => 'btn btn-primary']) ?> + $model->seo_category_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'seo_category_id', + 'name', + 'controller', + 'status', + ], + ]) ?> + +
diff --git a/backend/views/seo-dynamic/_form.php b/backend/views/seo-dynamic/_form.php new file mode 100755 index 0000000..d39755b --- /dev/null +++ b/backend/views/seo-dynamic/_form.php @@ -0,0 +1,59 @@ + + +
+ + + + field($model, 'name')->textInput(['maxlength' => true]) ?> + + field($model, 'action')->textInput(['maxlength' => true]) ?> + + field($model, 'param')->textInput(['maxlength' => true]) ?> + + field($model, 'key')->textInput(['maxlength' => true]) ?> + + field($model, 'fields')->textInput(['maxlength' => true]) ?> + + field($model, 'title')->textInput(['maxlength' => true]) ?> + + field($model, 'meta')->textInput(['maxlength' => true]) ?> + + field($model, 'h1')->textInput(['maxlength' => true]) ?> + + field($model, 'description')->textInput(['maxlength' => true]) ?> + + field($model, 'seo_text')->textarea(['rows' => 6]) ?> + + field($model, 'status')->textInput() ?> + +
+ isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + + + + + + + + + + + + + +
diff --git a/backend/views/seo-dynamic/_search.php b/backend/views/seo-dynamic/_search.php new file mode 100755 index 0000000..745abcd --- /dev/null +++ b/backend/views/seo-dynamic/_search.php @@ -0,0 +1,45 @@ + + + diff --git a/backend/views/seo-dynamic/create.php b/backend/views/seo-dynamic/create.php new file mode 100755 index 0000000..d71114a --- /dev/null +++ b/backend/views/seo-dynamic/create.php @@ -0,0 +1,22 @@ +title = Yii::t('app', 'Create Seo Dynamic'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Seo Dynamics'), 'url' => Url::toRoute(['index','seo_category_id'=>$seo_category_id])]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/seo-dynamic/index.php b/backend/views/seo-dynamic/index.php new file mode 100755 index 0000000..20b9167 --- /dev/null +++ b/backend/views/seo-dynamic/index.php @@ -0,0 +1,77 @@ +title = Yii::t('app', 'Seo Dynamics'); +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ $seo_category_id]), ['class' => 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'seo_dynamic_id', + 'seo_category_id', + 'name', + 'action', + 'fields', + 'meta', + // 'title', + // 'h1', + // 'description', + // 'seo_text:ntext', + // 'status', + + [ + 'class' => 'yii\grid\ActionColumn', + 'buttons' => [ + 'view' => function ($url, $model) + { + return Html::a ( + '', + Url::toRoute(['view','seo_category_id'=> $model->seo_category_id, 'id' => $model->seo_dynamic_id]), + [ + 'title' => "Просмотр", + ] + ); + }, + 'update' => function ($url, $model) + { + return Html::a ( + '', + Url::toRoute(['update','seo_category_id'=> $model->seo_category_id, 'id' => $model->seo_dynamic_id]), + [ + 'title' => "Редактировать", + ] + ); + }, + 'delete' => function ($url, $model) + { + + return Html::a('', Url::toRoute(['delete','seo_category_id'=> $model->seo_category_id, 'id' => $model->seo_dynamic_id]), [ + 'title' => Yii::t('yii', 'Delete'), + 'data-confirm' => Yii::t('yii', 'Are you sure to delete this item?'), + 'data-method' => 'post', + ]); + + }, + ], + ], + ], + ]); ?> +
diff --git a/backend/views/seo-dynamic/update.php b/backend/views/seo-dynamic/update.php new file mode 100755 index 0000000..d43fdfc --- /dev/null +++ b/backend/views/seo-dynamic/update.php @@ -0,0 +1,24 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'Seo Dynamic', +]) . $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Seo Dynamics'), 'url' => Url::toRoute(['index','seo_category_id'=>$seo_category_id])]; +$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => Url::toRoute(['view', 'seo_category_id'=>$seo_category_id, 'id' => $model->seo_dynamic_id])]; +$this->params['breadcrumbs'][] = Yii::t('app', 'Update'); +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/seo-dynamic/view.php b/backend/views/seo-dynamic/view.php new file mode 100755 index 0000000..36429f0 --- /dev/null +++ b/backend/views/seo-dynamic/view.php @@ -0,0 +1,45 @@ +title = $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Seo Dynamics'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->seo_dynamic_id], ['class' => 'btn btn-primary']) ?> + $model->seo_dynamic_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'seo_dynamic_id', + 'seo_category_id', + 'name', + 'action', + 'fields', + 'title', + 'meta', + 'h1', + 'description', + 'seo_text:ntext', + 'status', + ], + ]) ?> + +
diff --git a/backend/views/seo/_form.php b/backend/views/seo/_form.php new file mode 100755 index 0000000..9853be6 --- /dev/null +++ b/backend/views/seo/_form.php @@ -0,0 +1,41 @@ + + +
+ + + + field($model, 'url')->textInput(['maxlength' => true]) ?> + + field($model, 'title')->textInput(['maxlength' => true]) ?> + + field($model, 'meta')->textInput(['maxlength' => true]) ?> + + field($model, 'description')->textInput(['maxlength' => true]) ?> + + field($model, 'h1')->textInput(['maxlength' => true]) ?> + field($model, 'seo_text')->widget(CKEditor::className(), + [ + 'editorOptions' => ElFinder::ckeditorOptions('elfinder',[ + 'preset' => 'full', //разработанны стандартные настройки basic, standard, full данную возможность не обязательно использовать + 'inline' => false, //по умолчанию false]), + 'filebrowserUploadUrl'=>Yii::$app->getUrlManager()->createUrl('file/uploader/images-upload') + ] + ) + ]) ?> + +
+ isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/seo/_search.php b/backend/views/seo/_search.php new file mode 100755 index 0000000..fe3f629 --- /dev/null +++ b/backend/views/seo/_search.php @@ -0,0 +1,39 @@ + + + diff --git a/backend/views/seo/create.php b/backend/views/seo/create.php new file mode 100755 index 0000000..fb2601c --- /dev/null +++ b/backend/views/seo/create.php @@ -0,0 +1,21 @@ +title = Yii::t('app', 'Create Seo'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Seos'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/seo/index.php b/backend/views/seo/index.php new file mode 100755 index 0000000..1118984 --- /dev/null +++ b/backend/views/seo/index.php @@ -0,0 +1,36 @@ +title = Yii::t('app', 'Seo'); +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'seo_id', + 'url:url', + 'meta', + 'h1', + // 'seo_text:ntext', + + ['class' => 'yii\grid\ActionColumn'], + ], + ]); ?> +
diff --git a/backend/views/seo/update.php b/backend/views/seo/update.php new file mode 100755 index 0000000..0cdcc84 --- /dev/null +++ b/backend/views/seo/update.php @@ -0,0 +1,23 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'Seo', +]) . $model->title; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Seos'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->title, 'url' => ['view', 'id' => $model->seo_id]]; +$this->params['breadcrumbs'][] = Yii::t('app', 'Update'); +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/seo/view.php b/backend/views/seo/view.php new file mode 100755 index 0000000..fa1330f --- /dev/null +++ b/backend/views/seo/view.php @@ -0,0 +1,41 @@ +title = $model->title; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Seos'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->seo_id], ['class' => 'btn btn-primary']) ?> + $model->seo_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'seo_id', + 'url:url', + 'title', + 'meta', + 'description', + 'h1', + 'seo_text:ntext', + ], + ]) ?> + +
diff --git a/backend/views/service/_form.php b/backend/views/service/_form.php new file mode 100755 index 0000000..772d197 --- /dev/null +++ b/backend/views/service/_form.php @@ -0,0 +1,66 @@ + + +
+ + + + field($model, 'name')->textInput(['maxlength' => true]) ?> + + field($model, 'alias')->textInput(['maxlength' => true]) ?> + + field($model, 'body')->widget(CKEditor::className(), + [ + 'editorOptions' => ElFinder::ckeditorOptions('elfinder',[ + 'preset' => 'full', //разработанны стандартные настройки basic, standard, full данную возможность не обязательно использовать + 'inline' => false, //по умолчанию false]), + 'filebrowserUploadUrl'=>Yii::$app->getUrlManager()->createUrl('file/uploader/images-upload') + ] + ) + ]) ?> + + + $model, + 'field'=>'image', + 'size' => [ + [ + 'width'=>200, + 'height'=>200, + ], + [ + 'width'=>940, + 'height'=>480, + ] + ], + 'multi'=>false, + 'gallery' => $model->image, + 'name' => 'Загрузить изображение' + ]); + ?> + + field($model, 'meta_title')->textInput(['maxlength' => true]) ?> + + field($model, 'description')->textInput(['maxlength' => true]) ?> + + field($model, 'h1')->textInput(['maxlength' => true]) ?> + + field($model, 'seo_text')->textarea(['rows' => 6]) ?> + + +
+ isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/service/_search.php b/backend/views/service/_search.php new file mode 100755 index 0000000..04ba9b1 --- /dev/null +++ b/backend/views/service/_search.php @@ -0,0 +1,45 @@ + + + diff --git a/backend/views/service/create.php b/backend/views/service/create.php new file mode 100755 index 0000000..b84b8fd --- /dev/null +++ b/backend/views/service/create.php @@ -0,0 +1,21 @@ +title = Yii::t('app', 'Create Service'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Services'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/service/index.php b/backend/views/service/index.php new file mode 100755 index 0000000..0a25584 --- /dev/null +++ b/backend/views/service/index.php @@ -0,0 +1,44 @@ +title = Yii::t('app', 'Services'); +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'service_id', + 'name', + 'alias', + [ + 'format' => 'image', + 'attribute'=>'image', + ], + // 'meta_title', + // 'description', + // 'h1', + // 'seo_text:ntext', + // 'created_at', + // 'updated_at', + + ['class' => 'yii\grid\ActionColumn'], + ], + ]); ?> +
diff --git a/backend/views/service/update.php b/backend/views/service/update.php new file mode 100755 index 0000000..6e0f6ce --- /dev/null +++ b/backend/views/service/update.php @@ -0,0 +1,23 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'Service', +]) . $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Services'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->service_id]]; +$this->params['breadcrumbs'][] = Yii::t('app', 'Update'); +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/service/view.php b/backend/views/service/view.php new file mode 100755 index 0000000..17eaa9b --- /dev/null +++ b/backend/views/service/view.php @@ -0,0 +1,47 @@ +title = $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Services'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->service_id], ['class' => 'btn btn-primary']) ?> + $model->service_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'service_id', + 'name', + 'alias', + [ + 'format' => 'image', + 'attribute'=>'image', + ], + 'meta_title', + 'description', + 'h1', + 'seo_text:ntext', + 'created_at', + 'updated_at', + ], + ]) ?> + +
diff --git a/backend/views/site/error.php b/backend/views/site/error.php new file mode 100755 index 0000000..f44c697 --- /dev/null +++ b/backend/views/site/error.php @@ -0,0 +1,27 @@ +title = $name; +?> +
+ +

title) ?>

+ +
+ +
+ +

+ The above error occurred while the Web server was processing your request. +

+

+ Please contact us if you think this is a server error. Thank you. +

+ +
diff --git a/backend/views/site/index.php b/backend/views/site/index.php new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/backend/views/site/index.php diff --git a/backend/views/site/login.php b/backend/views/site/login.php new file mode 100755 index 0000000..7d7d499 --- /dev/null +++ b/backend/views/site/login.php @@ -0,0 +1,41 @@ +title = 'Login'; +$this->params['breadcrumbs'][] = $this->title; +?> + diff --git a/backend/views/slider-image/_form.php b/backend/views/slider-image/_form.php new file mode 100755 index 0000000..485facf --- /dev/null +++ b/backend/views/slider-image/_form.php @@ -0,0 +1,60 @@ + + + +
+ + ['enctype' => 'multipart/form-data']]); ?> + + field($model, 'image')->widget(\kartik\file\FileInput::classname(), [ + 'model' => $model, + 'attribute' => 'image', + 'options' => [ + 'accept' => 'image/*', + 'multiple' => true + ], + 'pluginOptions' => [ + 'allowedFileExtensions' => ['jpg','gif','png'], + 'initialPreview' => $model->imageUrl ? \common\components\artboximage\ArtboxImageHelper::getImage($model->imageUrl, 'slider') : '', + 'overwriteInitial' => true, + 'showRemove' => true, + 'showUpload' => false, + ], + ]); ?> + + + field($model, 'alt')->textInput(['maxlength' => true]) ?> + + field($model, 'title')->textInput(['maxlength' => true]) ?> + + field($model, 'end_at') + ->widget(DatePicker::className(), [ + 'pluginOptions' => [ + 'todayHighlight' => true, + 'format' => 'yyyy-mm-dd', + ]]) ?> + + field($model, 'url')->textInput(['maxlength' => true]) ?> + + field($model, 'status')->checkbox() ?> + + field($model, 'sort')->textInput() ?> + +
+ isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/slider-image/_search.php b/backend/views/slider-image/_search.php new file mode 100755 index 0000000..d9674e9 --- /dev/null +++ b/backend/views/slider-image/_search.php @@ -0,0 +1,41 @@ + + + diff --git a/backend/views/slider-image/create.php b/backend/views/slider-image/create.php new file mode 100755 index 0000000..1437321 --- /dev/null +++ b/backend/views/slider-image/create.php @@ -0,0 +1,25 @@ +title = Yii::t('app', 'Create Slider Image'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Slider Images'), 'url' => Url::toRoute(['index','slider_id'=>$slider_id])]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + 'slider' => $slider, + ]) ?> + +
diff --git a/backend/views/slider-image/index.php b/backend/views/slider-image/index.php new file mode 100755 index 0000000..b70e57a --- /dev/null +++ b/backend/views/slider-image/index.php @@ -0,0 +1,74 @@ +title = Yii::t('app', 'Slider Images'); +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ $slider_id]), ['class' => 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'slider_image_id', + 'slider_id', + 'image', + 'alt', + 'title', + // 'url:url', + // 'status', + // 'sort', + + [ + 'class' => 'yii\grid\ActionColumn', + 'buttons' => [ + 'view' => function ($url, $model) + { + return Html::a ( + '', + Url::toRoute(['view','slider_id'=> $model->slider_id, 'id' => $model->slider_image_id]), + [ + 'title' => "Просмотр", + ] + ); + }, + 'update' => function ($url, $model) + { + return Html::a ( + '', + Url::toRoute(['update','slider_id'=> $model->slider_id, 'id' => $model->slider_image_id]), + [ + 'title' => "Редактировать", + ] + ); + }, + 'delete' => function ($url, $model) + { + + return Html::a('', Url::toRoute(['delete','slider_id'=> $model->slider_id, 'id' => $model->slider_image_id]), [ + 'title' => Yii::t('yii', 'Delete'), + 'data-confirm' => Yii::t('yii', 'Are you sure to delete this item?'), + 'data-method' => 'post', + ]); + + }, + ], + ], + ], + ]); ?> +
diff --git a/backend/views/slider-image/update.php b/backend/views/slider-image/update.php new file mode 100755 index 0000000..e7cf1af --- /dev/null +++ b/backend/views/slider-image/update.php @@ -0,0 +1,27 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'Slider Image', +]) . $model->title; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Slider Images'), 'url' => Url::toRoute(['index','slider_id'=>$slider_id])]; +$this->params['breadcrumbs'][] = ['label' => $model->title, 'url' => Url::toRoute(['view', 'slider_id'=>$slider_id, 'id' => $model->slider_image_id])]; +$this->params['breadcrumbs'][] = Yii::t('app', 'Update'); +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + 'slider' => $slider, + ]) ?> + +
diff --git a/backend/views/slider-image/view.php b/backend/views/slider-image/view.php new file mode 100755 index 0000000..acb5d99 --- /dev/null +++ b/backend/views/slider-image/view.php @@ -0,0 +1,43 @@ +title = $model->title; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Slider Images'), 'url' => Url::toRoute(['index','slider_id'=>$slider_id])]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $slider_id, 'id' => $model->slider_image_id], ['class' => 'btn btn-primary']) ?> + $slider_id , 'id' => $model->slider_image_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'slider_image_id', + 'slider_id', + 'image', + 'alt', + 'title', + 'url:url', + 'status', + 'sort', + ], + ]) ?> + +
diff --git a/backend/views/slider/_form.php b/backend/views/slider/_form.php new file mode 100755 index 0000000..4ea7c7e --- /dev/null +++ b/backend/views/slider/_form.php @@ -0,0 +1,44 @@ + + +
+ + + + field($model, 'speed')->textInput() ?> + + field($model, 'duration')->textInput() ?> + + field($model, 'title')->textInput(['maxlength' => true]) ?> + + + field($model, 'width')->textInput(['maxlength' => true]) ?> + + field($model, 'height')->textInput(['maxlength' => true]) ?> + + + field($model, 'status')->widget(Select2::className(),([ + 'name' => 'status', + 'hideSearch' => true, + 'data' => [1 => 'Active', 2 => 'Inactive'], + 'options' => ['placeholder' => 'Select status...'], + 'pluginOptions' => [ + 'allowClear' => true + ] + ])) ?> + +
+ isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/slider/_search.php b/backend/views/slider/_search.php new file mode 100755 index 0000000..7e5731b --- /dev/null +++ b/backend/views/slider/_search.php @@ -0,0 +1,36 @@ + + + diff --git a/backend/views/slider/create.php b/backend/views/slider/create.php new file mode 100755 index 0000000..852aea0 --- /dev/null +++ b/backend/views/slider/create.php @@ -0,0 +1,21 @@ +title = Yii::t('app', 'Create Slider'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Sliders'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/slider/index.php b/backend/views/slider/index.php new file mode 100755 index 0000000..5d3e23e --- /dev/null +++ b/backend/views/slider/index.php @@ -0,0 +1,82 @@ +title = Yii::t('app', 'Sliders'); +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + [ + 'attribute' => 'slider_id', + 'value' => 'slider_id', + 'contentOptions' => ['style' => 'width: 70px;'], + ], + [ + 'attribute' => 'title', + 'value' => 'title', + ], + + [ + 'attribute' => 'status', + 'value' => function ($model) + { + return ($model->status == 0) ? 'Скрыто' : 'Показать'; + }, + ], + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{update} {image} {delete}', + 'buttons' => [ + 'update' => function ($url, $model) + { + return Html::a ( + '', + Url::toRoute(['slider/update', 'id' => $model->slider_id]), + [ + 'title' => "Редактировать", + ] + ); + }, + 'image' => function ($url, $model) + { + return Html::a ( + '', + Url::toRoute(['slider-image/index', 'slider_id' => $model->slider_id]), + [ + 'title' => "слайды", + ] + ); + }, + 'delete' => function ($url, $model) + { + return Html::a ( + '', + Url::toRoute(['slider/delete', 'id' => $model->slider_id]), + [ + 'title' => "Удалить", + ] + ); + }, + ], + 'contentOptions' => ['style' => 'width: 70px;'], + ], + ], + ]); ?> +
diff --git a/backend/views/slider/update.php b/backend/views/slider/update.php new file mode 100755 index 0000000..75eb629 --- /dev/null +++ b/backend/views/slider/update.php @@ -0,0 +1,23 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'Slider', +]) . $model->title; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Sliders'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->title, 'url' => ['view', 'id' => $model->slider_id]]; +$this->params['breadcrumbs'][] = Yii::t('app', 'Update'); +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/slider/view.php b/backend/views/slider/view.php new file mode 100755 index 0000000..1f8cb41 --- /dev/null +++ b/backend/views/slider/view.php @@ -0,0 +1,39 @@ +title = $model->title; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Sliders'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->slider_id], ['class' => 'btn btn-primary']) ?> + $model->slider_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'slider_id', + 'speed', + 'duration', + 'title', + 'status', + ], + ]) ?> + +
diff --git a/backend/views/subscribe/_form.php b/backend/views/subscribe/_form.php new file mode 100755 index 0000000..36ef492 --- /dev/null +++ b/backend/views/subscribe/_form.php @@ -0,0 +1,25 @@ + + + diff --git a/backend/views/subscribe/_search.php b/backend/views/subscribe/_search.php new file mode 100755 index 0000000..e2aaf8a --- /dev/null +++ b/backend/views/subscribe/_search.php @@ -0,0 +1,33 @@ + + + diff --git a/backend/views/subscribe/create.php b/backend/views/subscribe/create.php new file mode 100755 index 0000000..3f6f09f --- /dev/null +++ b/backend/views/subscribe/create.php @@ -0,0 +1,21 @@ +title = 'Create Subscribe'; +$this->params['breadcrumbs'][] = ['label' => 'Subscribes', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> + diff --git a/backend/views/subscribe/index.php b/backend/views/subscribe/index.php new file mode 100755 index 0000000..68e32f3 --- /dev/null +++ b/backend/views/subscribe/index.php @@ -0,0 +1,35 @@ +title = 'Subscribes'; +$this->params['breadcrumbs'][] = $this->title; +?> + diff --git a/backend/views/subscribe/update.php b/backend/views/subscribe/update.php new file mode 100755 index 0000000..2137e89 --- /dev/null +++ b/backend/views/subscribe/update.php @@ -0,0 +1,21 @@ +title = 'Update Subscribe: ' . $model->id; +$this->params['breadcrumbs'][] = ['label' => 'Subscribes', 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]]; +$this->params['breadcrumbs'][] = 'Update'; +?> + diff --git a/backend/views/subscribe/view.php b/backend/views/subscribe/view.php new file mode 100755 index 0000000..7c96baa --- /dev/null +++ b/backend/views/subscribe/view.php @@ -0,0 +1,38 @@ +title = $model->id; +$this->params['breadcrumbs'][] = ['label' => 'Subscribes', 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> + diff --git a/backend/views/user/_form.php b/backend/views/user/_form.php new file mode 100755 index 0000000..212c576 --- /dev/null +++ b/backend/views/user/_form.php @@ -0,0 +1,29 @@ + + +
+ + + + field($model, 'username')->textInput(['maxlength' => true]) ?> + + field($model, 'password')->textInput(['maxlength' => true]) ?> + + field($model, 'email',['enableAjaxValidation' => true])->textInput(['maxlength' => true]) ?> + + +
+ isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/user/_search.php b/backend/views/user/_search.php new file mode 100755 index 0000000..c1fbe51 --- /dev/null +++ b/backend/views/user/_search.php @@ -0,0 +1,37 @@ + + + diff --git a/backend/views/user/create.php b/backend/views/user/create.php new file mode 100755 index 0000000..3210ec4 --- /dev/null +++ b/backend/views/user/create.php @@ -0,0 +1,21 @@ +title = Yii::t('app', 'Create User'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Users'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/user/index.php b/backend/views/user/index.php new file mode 100755 index 0000000..7d12021 --- /dev/null +++ b/backend/views/user/index.php @@ -0,0 +1,47 @@ +title = Yii::t('app', 'Users'); +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ render('_search', ['model' => $searchModel]); ?> + +

+ 'btn btn-success']) ?> +

+ $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'id', + 'username', + 'email:email', + // 'status', + // 'created_at', + // 'updated_at', + + ['class' => 'yii\grid\ActionColumn', + 'template' => '{view}  {update}  {permit}  {delete}', + 'buttons' => + [ + 'permit' => function ($url, $model) { + return Html::a('', Url::to(['/permit/user/view', 'id' => $model->id]), [ + 'title' => Yii::t('yii', 'Change user role') + ]); }, + ] + ], + ], + ]); ?> +
diff --git a/backend/views/user/update.php b/backend/views/user/update.php new file mode 100755 index 0000000..94e31cd --- /dev/null +++ b/backend/views/user/update.php @@ -0,0 +1,23 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'User', +]) . $model->id; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Users'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]]; +$this->params['breadcrumbs'][] = Yii::t('app', 'Update'); +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/user/view.php b/backend/views/user/view.php new file mode 100755 index 0000000..953d13e --- /dev/null +++ b/backend/views/user/view.php @@ -0,0 +1,40 @@ +title = $model->id; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Users'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->id], ['class' => 'btn btn-primary']) ?> + $model->id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'id', + 'username', + 'email:email', + 'status', + 'created_at', + 'updated_at', + ], + ]) ?> + +
diff --git a/backend/web/.gitignore b/backend/web/.gitignore new file mode 100755 index 0000000..a6e95c8 --- /dev/null +++ b/backend/web/.gitignore @@ -0,0 +1,2 @@ +/index.php +/index-test.php diff --git a/backend/web/css/site.css b/backend/web/css/site.css new file mode 100755 index 0000000..a454526 --- /dev/null +++ b/backend/web/css/site.css @@ -0,0 +1,209 @@ +html, +body { + height: 100%; +} + +.wrap { + min-height: 100%; + height: auto; + margin: 0 auto -60px; + padding: 0 0 60px; +} + +.wrap > .container { + padding: 70px 15px 20px; +} + +.footer { + height: 60px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + padding-top: 20px; +} + +.jumbotron { + text-align: center; + background-color: transparent; +} + +.jumbotron .btn { + font-size: 21px; + padding: 14px 24px; +} + +.not-set { + color: #c55; + font-style: italic; +} + +/* add sorting icons to gridview sort links */ +a.asc:after, a.desc:after { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + padding-left: 5px; +} + +a.asc:after { + content: /*"\e113"*/ "\e151"; +} + +a.desc:after { + content: /*"\e114"*/ "\e152"; +} + +.sort-numerical a.asc:after { + content: "\e153"; +} + +.sort-numerical a.desc:after { + content: "\e154"; +} + +.sort-ordinal a.asc:after { + content: "\e155"; +} + +.sort-ordinal a.desc:after { + content: "\e156"; +} + +.grid-view td { + white-space: nowrap; +} + +.grid-view .filters input, +.grid-view .filters select { + min-width: 50px; +} + +.hint-block { + display: block; + margin-top: 5px; + color: #999; +} + +.error-summary { + color: #a94442; + background: #fdf7f7; + border-left: 3px solid #eed3d7; + padding: 10px 20px; + margin: 0 0 15px 0; +} + +/* align the logout "link" (button in form) of the navbar */ +.nav > li > form { + padding: 8px; +} + +.nav > li > form > button:hover { + text-decoration: none; +} +.new_admin_form input { + border: 1px solid #95ba2f !important; +} +.new_admin_form h1, .new_admin_form p, .new_admin_form label {color: #bdbdbd !important; font-weight: 400 !important;} +.new_admin_form .btn { + background: #95ba2f !important; + border-radius: 4px !important; + height: 29px !important; + text-transform: uppercase !important; + color: #ffffff !important; + text-decoration: none !important; + font-weight: 600 !important; + text-align: center !important; + border-bottom: 3px solid #799920 !important; + font-size: 12px !important; + outline: none !important; + border-top: none; + border-left: none; + border-right: none; +} +.new_admin_form .btn:focus { + box-shadow: none !important; +} +.new_admin_form .btn:hover { + border-bottom: 3px solid #95ba2f !important; +} +.new_admin_form .btn:active { + border-bottom: 3px solid #799920 !important; + background: #799920 !important; +} +.artbox_logo-wr { + perspective: 250px; +} +.artbox_logo { + text-align: center; + font-size: 42px; + color: #fff; + text-transform: uppercase; + margin-top: 9px; + -webkit-animation-name:anim_artbox; + -moz-animation-name:anim_artbox; + animation-name:anim_artbox; + -webkit-animation-duration:4.7s; + -moz-animation-duration:4.7s; + animation-duration:4.7s; + -webkit-animation-timing-function:linear; + -moz-animation-timing-function:linear; + animation-timing-function:linear; + -webkit-animation-iteration-count:infinite; + -moz-animation-iteration-count:infinite; + animation-iteration-count:infinite; + /*-webkit-animation-play-state:running;*/ + /*-moz-animation-play-state:running;*/ + /*animation-play-state:running*/ + -webkit-animation-play-state:paused; + -moz-animation-play-state:paused; + animation-play-state:paused; +} +@-webkit-keyframes anim_artbox { + 0% + { + -webkit-transform:rotateY(0deg) + } + + 100% + { + -webkit-transform:rotateY(360deg) + } +} + +@-moz-keyframes anim_artbox { + 0% + { + -moz-transform:rotateY(0deg) + } + + 100% + { + -moz-transform:rotateY(360deg) + } +} + +@keyframes anim_artbox { + 0% + { + transform:rotateY(0deg) + } + + 100% + { + transform:rotateY(360deg) + } +} +.artbox_logo_txt { + text-align: center; + font-size: 15px; + color: #fff; + margin-bottom: 11px; +} +.new_admin_form .help-block { + color: #d80400 !important; + text-align: center; + font-size: 13px !important; +} diff --git a/backend/web/favicon.ico b/backend/web/favicon.ico new file mode 100755 index 0000000..580ed73 Binary files /dev/null and b/backend/web/favicon.ico differ diff --git a/backend/web/js/fieldWidget.js b/backend/web/js/fieldWidget.js new file mode 100755 index 0000000..575b7b5 --- /dev/null +++ b/backend/web/js/fieldWidget.js @@ -0,0 +1,24 @@ +$(function(){ + $.each($('.delete-field-item'), function(index, value) { + var container = $(value).parents('.field_list').first(); + var count = $(container).find('.form-group').length; + if(count <= 1) { + $(container).find('.delete-field-item').addClass('hidden'); + } + }); + $(document).on('click', '.delete-field-item', function(){ + var container = $(this).parents('.field_list').first(); + $(this).parent('.form-group').remove(); + var count = $(container).find('.form-group').length; + if(count <= 1) { + $(container).find('.delete-field-item').addClass('hidden'); + } + }); + $(document).on('click', '[class*=add_field_w]', function() { + var container = $(this).siblings('.field_list').first(); + var count = $(container).find('.form-group').length; + if(count > 1) { + $(container).find('.delete-field-item').removeClass('hidden'); + } + }); +}); \ No newline at end of file diff --git a/backend/web/js/site.js b/backend/web/js/site.js new file mode 100755 index 0000000..067057b --- /dev/null +++ b/backend/web/js/site.js @@ -0,0 +1,67 @@ +$(document).ready(function(){ + + var iii = true; + + + + $('body').on('click','.btn-warning', function(){ + + var testt = $(this); + + var id = $(this).attr('id'); + + var ddd = document.getElementById('test_tr_class'); + + // $.post( "index.php?r=order%2Fupdate&id=1", function( data ) { + + if (!ddd) { + + testt.closest('tr').after( + '' + + '' + + 'data' + + '' + + '' + ); + + loadShow(testt,id); + + }else{ + document.getElementById('test_tr_class').remove(); + }; + + iii = false; + console.log(iii); + + + + + }); + + function loadShow(testt,id){ + $.post( "/admin/orders/show?id=" + id + '"', function( data ) { + + $('#content_'+id).html(data); + + $('#add_mod').submit(function() { + $.ajax({ + type: "POST", + url: "/admin/orders/add?order_id="+id, + data: $(this).serialize(), // serializes the form's elements. + success: function(data) + { + loadShow(testt,id); // show response from the php script. + } + }); + return false; + }); + + }); + + } + + + + + +}); \ No newline at end of file diff --git a/backend/web/robots.txt b/backend/web/robots.txt new file mode 100755 index 0000000..70c2374 --- /dev/null +++ b/backend/web/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / diff --git a/codeception.yml b/codeception.yml new file mode 100755 index 0000000..b2d8613 --- /dev/null +++ b/codeception.yml @@ -0,0 +1,21 @@ +actor: Tester +paths: + tests: tests + log: tests/_output + data: tests/_data + support: tests/_support + envs: tests/_envs +settings: + bootstrap: _bootstrap.php + colors: true + memory_limit: 1024M +extensions: + enabled: + - Codeception\Extension\RunFailed +modules: + config: + Db: + dsn: '' + user: '' + password: '' + dump: tests/_data/dump.sql diff --git a/common/behaviors/ArtBoxAccessBehavior.php b/common/behaviors/ArtBoxAccessBehavior.php new file mode 100755 index 0000000..44645f0 --- /dev/null +++ b/common/behaviors/ArtBoxAccessBehavior.php @@ -0,0 +1,111 @@ + 'interception', + ]; + } + + public function interception($event) + { + if(!isset( Yii::$app->i18n->translations['db_rbac'])){ + Yii::$app->i18n->translations['db_rbac'] = [ + 'class' => 'yii\i18n\PhpMessageSource', + 'sourceLanguage' => 'ru-Ru', + 'basePath' => '@developeruz/db_rbac/messages', + ]; + } + + $route = Yii::$app->getRequest()->resolve(); + + //Проверяем права по конфигу + $this->createRule(); + $user = Instance::ensure(Yii::$app->user, User::className()); + $request = Yii::$app->getRequest(); + $action = $event->action; + + + + + if(!$this->cheсkByRule($action, $user, $request)) + { + + //И по AuthManager + if(!$this->checkPermission($route)){ + if ($user->getIsGuest()) { + $user->loginRequired(); + } else { + throw new ForbiddenHttpException(Yii::t('db_rbac','Недостаточно прав')); + } + } + + } + } + + protected function createRule() + { + + foreach($this->rules as $controller => $rule) + { + + foreach ($rule as $singleRule) { + if (is_array($singleRule)) { + $option = [ + 'controllers' => [$controller], + 'class' => 'yii\filters\AccessRule' + ]; + $this->_rules[] = Yii::createObject(array_merge($option, $singleRule)); + + } + } + } + } + + protected function cheсkByRule($action, $user, $request) + { + + foreach ($this->_rules as $rule) { + + if ($rule->allows($action, $user, $request)) + return true; + } + return false; + } + + protected function checkPermission($route) + { + //$route[0] - is the route, $route[1] - is the associated parameters + + $routePathTmp = explode('/', $route[0]); + $routeVariant = array_shift($routePathTmp); + if(Yii::$app->user->can($routeVariant, $route[1])) + return true; + + foreach($routePathTmp as $routePart) + { + $routeVariant .= '/'.$routePart; + + if(Yii::$app->user->can($routeVariant, $route[1])) + return true; + } + + return false; + } + +} \ No newline at end of file diff --git a/common/behaviors/NotifyBehavior.php b/common/behaviors/NotifyBehavior.php new file mode 100755 index 0000000..61dc7a3 --- /dev/null +++ b/common/behaviors/NotifyBehavior.php @@ -0,0 +1,69 @@ + 'afterUpdate', + ]; + } + + public function afterUpdate($event) + { + /** + * @var Event $event + * @var CommentModel $owner + */ + $owner = $this->owner; + if($owner->status == $owner::STATUS_ACTIVE) { + $entity = $owner->entity; + $model = $entity::findOne($owner->entity_id); + if($model != NULL) { + if(!empty( $owner->user )) { + $customer = $owner->user; + if(preg_match('/\S+@\S+\.\S+/', $customer->username)) { + $email = $customer->username; + } else { + return false; + } + } + $url = \Yii::$app->urlManager->getHostInfo(); + if($model::className() == Product::className()) { + $url .= '/product/'.$model->alias.'#artbox-comment'; + } elseif($model::className() == Articles::className()) { + $url .= '/blog/'.$model->translit.'#artbox-comment'; + } + $mailer = Mailer::widget([ + 'type' => 'comment_notify', + 'params' => [ + 'model' => $model, + 'url' => $url, + 'comment' => $owner, + ], + 'subject' => 'Ваш комментарий опубликован', + 'email' => ( !empty( $customer ) ? $email : $owner->email ), + ]); + return $mailer; + } + } + return false; + } + } \ No newline at end of file diff --git a/common/behaviors/RatingBehavior.php b/common/behaviors/RatingBehavior.php new file mode 100755 index 0000000..0d999ca --- /dev/null +++ b/common/behaviors/RatingBehavior.php @@ -0,0 +1,42 @@ + 'afterUpdate', + ]; + } + + public function afterUpdate($event) + { + /** + * @var Event $event + * @var CommentModel $owner + */ + $owner = $this->owner; + if($owner->entity == Product::className() || $owner->entity == Articles::className()) { + $entity = $owner->entity; + $model = $entity::findOne($owner->entity_id); + if($model != NULL) { + $model->recalculateRating(); + } + } + } + } \ No newline at end of file diff --git a/common/behaviors/RuSlug.php b/common/behaviors/RuSlug.php new file mode 100755 index 0000000..2185a4d --- /dev/null +++ b/common/behaviors/RuSlug.php @@ -0,0 +1,139 @@ + 'getSlug' + ]; + } + + public function getSlug( $event ) + { + if ( empty( $this->owner->{$this->out_attribute} ) ) { + $this->owner->{$this->out_attribute} = $this->generateSlug( $this->owner->{$this->in_attribute} ); + } else { + $this->owner->{$this->out_attribute} = $this->generateSlug( $this->owner->{$this->out_attribute} ); + } + } + + private function generateSlug( $slug ) + { + $slug = $this->translit( $slug ); + if ( $this->checkUniqueSlug( $slug ) ) { + return $slug; + } else { + for ( $suffix = 2; !$this->checkUniqueSlug( $new_slug = $slug . '-' . $suffix ); $suffix++ ) {} + return $new_slug; + } + } + + private function slugify( $slug ) + { + if ( $this->translit ) { + return yii\helpers\Inflector::slug( TransliteratorHelper::process( $slug ), '-', true ); + } else { + return $this->slug( $slug, '-', true ); + } + } + + private function slug( $string, $replacement = '-', $lowercase = true ) + { + $string = preg_replace( '/[^\p{L}\p{Nd}]+/u', $replacement, $string ); + $string = trim( $string, $replacement ); + return $lowercase ? strtolower( $string ) : $string; + } + + private function checkUniqueSlug( $slug ) + { + $pk = $this->owner->primaryKey(); + $pk = $pk[0]; + + $condition = $this->out_attribute . ' = :out_attribute'; + $params = [ ':out_attribute' => $slug ]; + if ( !$this->owner->isNewRecord ) { + $condition .= ' and ' . $pk . ' != :pk'; + $params[':pk'] = $this->owner->{$pk}; + } + + return !$this->owner->find() + ->where( $condition, $params ) + ->one(); + } + + static function translit ($string, $setting = 'all') + { + $letter = array ( + + 'а' => 'a', 'б' => 'b', 'в' => 'v', + 'г' => 'g', 'д' => 'd', 'е' => 'e', + 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', + 'и' => 'i', 'й' => 'y', 'к' => 'k', + 'л' => 'l', 'м' => 'm', 'н' => 'n', + 'о' => 'o', 'п' => 'p', 'р' => 'r', + 'с' => 's', 'т' => 't', 'у' => 'u', + 'ф' => 'f', 'х' => 'h', 'ц' => 'c', + 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', + 'ь' => "", 'ы' => 'y', 'ъ' => "", + 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', + 'ї' => 'yi', 'є' => 'ye', 'і' => 'ee', + + 'А' => 'A', 'Б' => 'B', 'В' => 'V', + 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', + 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', + 'И' => 'I', 'Й' => 'Y', 'К' => 'K', + 'Л' => 'L', 'М' => 'M', 'Н' => 'N', + 'О' => 'O', 'П' => 'P', 'Р' => 'R', + 'С' => 'S', 'Т' => 'T', 'У' => 'U', + 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', + 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', + 'Ь' => "", 'Ы' => 'Y', 'Ъ' => "", + 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya', + 'Ї' => 'Yi', 'Є' => 'Ye', 'І' => 'Ee' + ); + + $symbol = array ( + ' ' => '-', "'" => '', '"' => '', + '!' => '', "@" => '', '#' => '', + '$' => '', "%" => '', '^' => '', + ';' => '', "*" => '', '(' => '', + ')' => '', "+" => '', '~' => '', + '.' => '', ',' => '-', '?' => '', + '…' => '', '№' => 'N', '°' => '', + '`' => '', '|' => '', '&' => '-and-', + '<' => '', '>' => '' + ); + + if ($setting == 'all') + { + $converter = $letter + $symbol; + } + else if ($setting == 'letter') + { + $converter = $letter; + } + else if ($setting == 'symbol') + { + $converter = $symbol; + } + + $url = strtr ($string, $converter); + + $url = str_replace ("---", '-', $url); + $url = str_replace ("--", '-', $url); + + return $url; + } + +} \ No newline at end of file diff --git a/common/behaviors/SaveImgBehavior.php b/common/behaviors/SaveImgBehavior.php new file mode 100755 index 0000000..0f00673 --- /dev/null +++ b/common/behaviors/SaveImgBehavior.php @@ -0,0 +1,105 @@ + 'beforeUpdate', + ActiveRecord::EVENT_BEFORE_INSERT => 'beforeInsert', + ]; + } + + public function beforeUpdate($event) + { + foreach($this->fields as $field){ + if ( ($image = UploadedFile::getInstance($this->owner, $field['name'])) ) { + $this->owner->{$field['name']} = $image->name; + } + + if(!$this->owner->{$field['name']}){ + $this->owner->{$field['name']} = $this->owner->getOldAttribute($field['name']); + } + + + if ($image) { + $imgDir = \Yii::getAlias('@storage/'.$field['directory'].'/'); + + if(!is_dir($imgDir)) { + mkdir($imgDir, 0755, true); + } + + $image->saveAs(\Yii::getAlias('@storage/'.$field['directory'].'/' . $image->name)); + } + } + + + + } + + public function getImagesConfig($image = 'image') { + $op = []; + if ($this->owner->$image) { + + $op[] = [ + 'caption' => $this->owner->$image, + 'url' => \yii\helpers\Url::to(['delimg', 'id' => $this->owner->primaryKey, 'field' =>$image ]), + 'key' => $this->owner->primaryKey, + 'extra' => [ + 'id' => $this->owner->primaryKey, + ], + ]; + + } + return $op; + } + + + public function beforeInsert($event) + { + foreach($this->fields as $field){ + + if ( ($image = UploadedFile::getInstance($this->owner, $field['name'])) ) { + $this->owner->{$field['name']} = $image->name; + } + + + + if ($image) { + $imgDir = \Yii::getAlias('@storage/'.$field['directory'].'/'); + + if(!is_dir($imgDir)) { + mkdir($imgDir, 0755, true); + } + + $image->saveAs(\Yii::getAlias('@storage/'.$field['directory'].'/' . $image->name)); + } + } + } + + public function getImageFile($image = 'image') { + return empty($this->owner->$image) ? null : '/storage/'.$this->fields[0]['directory'].'/'. $this->owner->$image; + } + + public function getImageUrl($image = 'image') { + return empty($this->owner->$image) ? null : '/storage/'.$this->fields[0]['directory'].'/'. $this->owner->$image; + } + + + +} \ No newline at end of file diff --git a/common/behaviors/SaveMultipleImgBehavior.php b/common/behaviors/SaveMultipleImgBehavior.php new file mode 100755 index 0000000..ddd2f72 --- /dev/null +++ b/common/behaviors/SaveMultipleImgBehavior.php @@ -0,0 +1,135 @@ + 'downloadImages', + ActiveRecord::EVENT_BEFORE_INSERT => 'downloadImages', + ]; + } + + public function downloadImages($event) + { + foreach($this->fields as $field){ + + + $this->imagesUpload = UploadedFile::getInstances($this->owner, $field['name']); + + if ( ($images = $this->imagesUpload($field)) !== FALSE) { + + foreach ($images as $image) { + $imageModel = new ProductImage(); + $imageModel->product_id = $this->owner->product_id; + $imageModel->image = $image; + $imageModel->save(); + } + + + } + + } + } + + + + /** + * @param $field array ['directory','name'] + * @return array + */ + + public function imagesUpload($field) + { + $images = []; + + /** + * @var $image UploadedFile + */ + + foreach ($this->imagesUpload as $image) { + + $imageName = $image->baseName . '.' . $image->extension; + $i = 0; + + while (file_exists(\Yii::getAlias('@imagesDir/'.$field['directory'].'/' . $imageName))) { + $i++; + $imageName = $image->baseName . '_' . $i . '.' . $image->extension; + } + + $imgDir = \Yii::getAlias('@imagesDir/'.$field['directory'].'/'); + + if (!is_dir($imgDir)) { + mkdir($imgDir, 0755, true); + } + + $image->saveAs($imgDir . $imageName); + + $images[] = $imageName; + + } + return $images; + } + + + + + public function getImageFile($image = 'image') { + return empty($this->owner->$image) ? null : '/storage/'.$this->fields[0]['directory'].'/'. $this->owner->$image; + } + + public function getImageUrl($image = 'image') { + return empty($this->owner->$image) ? null : '/storage/'.$this->fields[0]['directory'].'/'. $this->owner->$image; + } + + public function getImagesConfig() { + $op = []; + if ($this->owner->images) { + foreach ($this->owner->images as $image) { + $op[] = [ + 'caption' => $image->owner->image, + 'url' => \yii\helpers\Url::to(['/product/manage/delimg', 'id' => $image->product_image_id]), + 'key' => $image->primaryKey, + 'extra' => [ + 'id' => $image->primaryKey, + ], + ]; + } + } + return $op; + } + + public function getImagesHTML() { + $op = []; + if ($this->images) { + foreach ($this->images as $image) { + $op[] = \common\components\artboximage\ArtboxImageHelper::getImage($image->imageUrl, 'admin_thumb'); + } + } + return $op; + } + + + + + + + +} \ No newline at end of file diff --git a/common/behaviors/ShowImage.php b/common/behaviors/ShowImage.php new file mode 100755 index 0000000..dde9c28 --- /dev/null +++ b/common/behaviors/ShowImage.php @@ -0,0 +1,43 @@ + 'getSlug', + ActiveRecord::EVENT_BEFORE_UPDATE=> 'getSlug' + ]; + } + + public function getSlug( $event ) + { + if(!empty($this->owner->{$this->in_attribute})){ + if ( empty( $this->owner->{$this->out_attribute} ) ) { + $this->owner->{$this->out_attribute} = $this->generateSlug( $this->owner->{$this->in_attribute} ); + } else { + $this->owner->{$this->out_attribute} = $this->generateSlug( $this->owner->{$this->out_attribute} ); + } + } + + } + + private function generateSlug( $slug ) + { + $slug = $this->slugify( $slug ); + if ( $this->checkUniqueSlug( $slug ) ) { + return $slug; + } else { + for ( $suffix = 2; !$this->checkUniqueSlug( $new_slug = $slug . '-' . $suffix ); $suffix++ ) {} + return $new_slug; + } + } + + private function slugify( $slug ) + { + if ( $this->translit ) { + return yii\helpers\Inflector::slug( $this->translit( $slug ), '-', true ); + } else { + return $this->slug( $slug, '-', true ); + } + } + + private function slug( $string, $replacement = '-', $lowercase = true ) + { + $string = preg_replace( '/[^\p{L}\p{Nd}]+/u', $replacement, $string ); + $string = trim( $string, $replacement ); + return $lowercase ? strtolower( $string ) : $string; + } + + private function checkUniqueSlug( $slug ) + { + $pk = $this->owner->primaryKey(); + $pk = $pk[0]; + + $condition = $this->out_attribute . ' = :out_attribute'; + $params = [ ':out_attribute' => $slug ]; + if ( !$this->owner->isNewRecord ) { + $condition .= ' and ' . $pk . ' != :pk'; + $params[':pk'] = $this->owner->{$pk}; + } + + return !$this->owner->find() + ->where( $condition, $params ) + ->one(); + } + + + static function translit ($string, $setting = 'all') + { + $letter = array ( + + 'а' => 'a', 'б' => 'b', 'в' => 'v', + 'г' => 'g', 'д' => 'd', 'е' => 'e', + 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', + 'и' => 'i', 'й' => 'y', 'к' => 'k', + 'л' => 'l', 'м' => 'm', 'н' => 'n', + 'о' => 'o', 'п' => 'p', 'р' => 'r', + 'с' => 's', 'т' => 't', 'у' => 'u', + 'ф' => 'f', 'х' => 'h', 'ц' => 'c', + 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', + 'ь' => "", 'ы' => 'y', 'ъ' => "", + 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', + 'ї' => 'yi', 'є' => 'ye', 'і' => 'ee', + + 'А' => 'A', 'Б' => 'B', 'В' => 'V', + 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', + 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', + 'И' => 'I', 'Й' => 'Y', 'К' => 'K', + 'Л' => 'L', 'М' => 'M', 'Н' => 'N', + 'О' => 'O', 'П' => 'P', 'Р' => 'R', + 'С' => 'S', 'Т' => 'T', 'У' => 'U', + 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', + 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', + 'Ь' => "", 'Ы' => 'Y', 'Ъ' => "", + 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya', + 'Ї' => 'Yi', 'Є' => 'Ye', 'І' => 'Ee' + ); + + $symbol = array ( + ' ' => '-', "'" => '', '"' => '', + '!' => '', "@" => '', '#' => '', + '$' => '', "%" => '', '^' => '', + ';' => '', "*" => '', '(' => '', + ')' => '', "+" => '', '~' => '', + '.' => '', ',' => '-', '?' => '', + '…' => '', '№' => 'N', '°' => '', + '`' => '', '|' => '', '&' => '-and-', + '<' => '', '>' => '' + ); + + if ($setting == 'all') + { + $converter = $letter + $symbol; + } + else if ($setting == 'letter') + { + $converter = $letter; + } + else if ($setting == 'symbol') + { + $converter = $symbol; + } + + $url = strtr ($string, $converter); + + $url = str_replace ("---", '-', $url); + $url = str_replace ("--", '-', $url); + + return $url; + } + +} \ No newline at end of file diff --git a/common/components/Request.php b/common/components/Request.php new file mode 100755 index 0000000..98a8adf --- /dev/null +++ b/common/components/Request.php @@ -0,0 +1,41 @@ +web, "", parent::getBaseUrl()) . $this->adminUrl; + + } + + + + public function resolvePathInfo() + + { + + if ($this->getUrl() === $this->adminUrl) { + + return ""; + + } else { + + return parent::resolvePathInfo(); + + } + + } + +} \ No newline at end of file diff --git a/common/components/SmsSender.php b/common/components/SmsSender.php new file mode 100755 index 0000000..226a0fc --- /dev/null +++ b/common/components/SmsSender.php @@ -0,0 +1,51 @@ +\n"; + $myXML .= ""; + $myXML .= "SENDSMS"; + $myXML .= ' ' . "\n"; + $myXML .= " " . $text . ""; + $myXML .= " " . $recipient . ""; + $myXML .= ""; + $myXML .= ""; + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_USERPWD, $user . ':' . $password); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_URL, 'http://sms-fly.com/api/api.php'); + curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml", "Accept: text/xml")); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $myXML); + $response = curl_exec($ch); + curl_close($ch); + + return $response; + } +} diff --git a/common/components/artboximage/ArtboxImage.php b/common/components/artboximage/ArtboxImage.php new file mode 100755 index 0000000..244bd62 --- /dev/null +++ b/common/components/artboximage/ArtboxImage.php @@ -0,0 +1,81 @@ + 'jpeg', + 'jpeg' => 'jpeg', + 'png' => 'png', + 'gif' => 'gif', + 'bmp' => 'bmp', + ]; + + public $uploadUrl = '/admin/artboxfile/action/upload'; + + public function load($file = null, $driver = null) { + if(empty($file) || !realpath($file)) { + throw new ErrorException('File name can not be empty and exists'); + } + return Image::factory($file, $driver ? $driver : $this->driver); + } + + public function fileinputWidget($model, $modelField, $formField = 'fileUpload', $multiple = false, $imageOnly = true) { + $options = [ + 'multiple' => $multiple, + ]; + if ($imageOnly) { + $options['accept'] = 'image/*'; + } + return FileInput::widget([ + 'name' => $formField, + 'options' => $options, + 'pluginOptions' => [ + 'allowedFileExtensions' => array_keys($this->extensions), + // @todo set for multiple + 'initialPreview' => $model->{$modelField} ? Html::img($model->{$modelField}) : '', + 'overwriteInitial' => !$multiple, + 'showRemove' => true, + 'showUpload' => false, + 'uploadUrl' => $this->uploadUrl, + 'uploadExtraData' => [ + 'fileField' => $modelField, + 'multiple' => intval($multiple), + ], + ], + 'pluginEvents' => [ + "change" => "function() { console.log('change'); }", + "open" => "function() { console.log('open'); }", + "save" => "function() { console.log('save'); }", + "upload" => "function() { console.log('upload'); }", + "uploaded" => "function() { console.log('uploaded'); }", + "filepreupload" => "function() { console.log('filepreupload'); }", + "fileuploaded" => "function(event, files, extra) { console.log(event, files, extra); }", + "fileuploaderror" => "function() { console.log('fileuploaderror'); }", + "filebatchuploaderror" => "function() { console.log('filebatchuploaderror'); }", + "filebatchuploadsuccess" => "function() { console.log('filebatchuploadsuccess'); }", + "filebatchuploadcomplete" => "function() { console.log('filebatchuploadcomplete'); }", + 'filebatchuploadsuccess' => "function(event, files, extra) { + console.log(event, files, extra); + }", + ], + ]); + } +} \ No newline at end of file diff --git a/common/components/artboximage/ArtboxImageBehavior.php b/common/components/artboximage/ArtboxImageBehavior.php new file mode 100755 index 0000000..51a2c42 --- /dev/null +++ b/common/components/artboximage/ArtboxImageBehavior.php @@ -0,0 +1,10 @@ +artboximage; + } + return self::$imageDriver; + } + + public function getPreset($preset) { + + if (empty(self::$presets)) { + self::$presets = self::getDriver()->presets; + } + return empty(self::$presets[$preset]) ? null : self::$presets[$preset]; + } + + public static function getImage($file, $preset, $imgOptions = []) { + $preset_alias = is_array($preset) ? array_keys($preset)[0] : null; + return Html::img(self::getImageSrc($file, $preset, $preset_alias), $imgOptions); + } + + public static function getImageSrc($file, $preset, $preset_alias = null) { + if (is_string($preset)) { + $preset_alias = $preset; + $preset = self::getPreset($preset); + } + if (empty($preset) || empty($preset_alias)) { + return $file; + } + + $filePath = self::getPathFromUrl($file); + if (!file_exists($filePath) || !preg_match('#^(.*)\.(' . self::getExtensionsRegexp() . ')$#', $file, $matches)) { + return $file; + } + return self::getPresetUrl($filePath, $preset, $preset_alias); + } + + public static function fileinputWidget($model, $modelField, $formField = 'fileUpload', $multiple = false) { + return Yii::$app->artboximage->fileinputWidget($model, $modelField, $formField, $multiple); + } + + private static function getPathFromUrl($url) { + return substr_replace($url, self::getDriver()->rootPath, 0, strlen(self::getDriver()->rootUrl)); + } + + private static function getUrlFromPath($path) { + return substr_replace($path, self::getDriver()->rootUrl, 0, strlen(self::getDriver()->rootPath)); + } + + private static function getPresetUrl($filePath, $preset, $preset_alias) { + $pathinfo = pathinfo($filePath); + $presetPath = $pathinfo['dirname'] .'/styles/'. strtolower($preset_alias); + $presetFilePath = $presetPath .'/'. $pathinfo['basename']; + $presetUrl = self::getUrlFromPath($presetFilePath); + if (file_exists($presetFilePath)) { + return $presetUrl; + } + if (!file_exists($presetPath)) { + @mkdir($presetPath, 0777, true); + } + $output = self::createPresetImage($filePath, $preset, $preset_alias); + if ( !empty($output) ) { + $f = fopen($presetFilePath, 'w'); + fwrite($f, $output); + fclose($f); + return $presetUrl; + } + return false; + } + + private static function createPresetImage($filePath, $preset, $preset_alias) + { + $image = self::getDriver()->load($filePath); + foreach ($preset as $action => $data) { + switch($action) { + case 'resize': + $width = empty($data['width']) ? null : $data['width']; + $height = empty($data['height']) ? null : $data['height']; + $master = empty($data['master']) ? null : $data['master']; + $image->resize($width, $height, $master); + break; + case 'flip': + $image->flip(@$data['direction']); + break; + default: + break; + } + } + return $image->render(); + } + + /** + * Get extensions regexp + * @return string regexp + */ + private function getExtensionsRegexp() + { + $keys = array_keys(self::getDriver()->extensions); + return '(?i)' . join('|', $keys); + } + + /** + * Get size from suffix + * @param string $suffix + * @return string size + */ + private function getSizeFromSuffix($suffix) + { + return array_search($suffix, $this->getSizeSuffixes()); + } + + /** + * Get suffix from size + * @param string $size + * @return string suffix + */ + private function getSufixFromSize($size) + { + return ArrayHelper::getValue($this->getSizeSuffixes(), $size); + } + + private function getSizeSuffixes() + { + $suffixes = []; + foreach ($this->sizes as $size => $sizeConf) { + $suffixes[$size] = ArrayHelper::getValue($this->sizeSuffixes, $size, $this->defaultSizeSuffix . $size); + } + return $suffixes; + } +} \ No newline at end of file diff --git a/common/components/artboxtree/ArtboxTreeBehavior.php b/common/components/artboxtree/ArtboxTreeBehavior.php new file mode 100755 index 0000000..8774aa1 --- /dev/null +++ b/common/components/artboxtree/ArtboxTreeBehavior.php @@ -0,0 +1,445 @@ + $keyNameDepth; + public $primaryKeyMode = true; + + /** + * @var string + */ + public $delimiter = '|'; + + /** + * @var ActiveRecord|self|null + */ + protected $entity; + + /** + * @param ActiveRecord $owner + * @throws Exception + */ + public function attach($owner) + { + parent::attach($owner); + if ($this->keyNameId === null) { + $primaryKey = $owner->primaryKey(); + if (!isset($primaryKey[0])) { + throw new Exception('"' . $owner->className() . '" must have a primary key.'); + } + $this->keyNameId = $primaryKey[0]; + } + } + + public function events() + { + return [ + // @todo Use beforeSave for automatic set MP-params + ActiveRecord::EVENT_BEFORE_UPDATE => 'beforeUpdate', + ActiveRecord::EVENT_AFTER_INSERT => 'afterInsert', + ]; + } + + /* + * Main methods + */ + + /* + * get one parent + * use AL-method + */ + public function getParent() { + return $this->getParentAL(); + } + + /* + * get all parents + * use MP-method + */ + public function getParents() { + return $this->getParentsMP(); + } + + /* + * get one-level children items + * use AL-method + */ + public function getChildren() { + return $this->getChildrenAL(); + } + + /* + * get all-level children items + * use MP-method + */ + public function getAllChildren($depth = null, $where = [], $with = null) { + return $this->getAllChildrenMP($depth, $where, $with); + } + + /* + * get all-level children items + * use MP-method + */ + public function getAllChildrenTree($depth = null, $where = [], $with = null) { + $query = $this->getAllChildrenMP($depth, $where, $with); + return $this->buildTree($query->all(), $this->owner->getAttribute($this->keyNameId)); + } + + // @todo Check algorytm + public function buildTree(array $data, $parentId = 0) { + $result = []; + foreach ($data as $key => $element) { + if ($element->getAttribute($this->keyNameParentId) == $parentId) { + unset($data[$key]); + $children = $this->buildTree($data, $element->getAttribute($this->keyNameId)); + $result[] = [ + 'item' => $element, + 'children' => $children + ]; + } + } + return $result; + } + + + /* + * ================================ + * MP-methods + * ================================ + */ + + /* + * Full-path (use MP-method) + */ + public function getParentsMP($depth = null) { + $tableName = $this->owner->tableName(); + $path = $this->owner->getAttribute($this->keyNamePath); + $query = $this->owner->find() + ->andWhere(['<@', "{$tableName}.[[{$this->keyNamePath}]]", $path]); + if ($depth > 0) { + $query->andWhere(['>=', "{$tableName}.[[{$this->keyNameDepth}]]", $this->owner->getAttribute($this->keyNameDepth) - $depth]); + } + $query->andWhere(['<', "{$tableName}.[[{$this->keyNameDepth}]]", $this->owner->getAttribute($this->keyNameDepth)]); + + $orderBy = []; + $orderBy["{$tableName}.[[{$this->keyNameDepth}]]"] = SORT_ASC; + $orderBy["{$tableName}.[[{$this->keyNameId}]]"] = SORT_ASC; + + $query + ->andWhere($this->groupWhere()) + ->addOrderBy($orderBy); + $query->multiple = true; + + return $query; + } + /*public function getParentsMP($depth = null) { + $path = $this->getParentPath(); + if ($path !== null) { + $paths = explode(',', trim($path, '{}')); + if (!$this->primaryKeyMode) { + $path = null; + $paths = array_map( + function ($value) use (&$path) { + return $path = ($path !== null ? $path . ',' : '') . $value; + }, + $paths + ); + } + if ($depth !== null) { + $paths = array_slice($paths, -$depth); + } + } else { + $paths = []; + } + + $tableName = $this->owner->tableName(); + if ($this->primaryKeyMode) { + $condition[] = ["{$tableName}.[[{$this->keyNameId}]]" => $paths]; + } else { + $condition[] = ["{$tableName}.[[{$this->keyNamePath}]]" => $paths]; + } + + $query = $this->owner->find() + ->andWhere($condition) + ->andWhere($this->groupWhere()) + ->addOrderBy(["{$tableName}.[[{$this->keyNamePath}]]" => SORT_ASC]); + $query->multiple = true; + + return $query; + }*/ + + /** + * @param bool $asArray = false + * @return null|string|array + */ + public function getParentPath($asArray = false) + { + return static::getParentPathInternal($this->owner->getAttribute($this->keyNamePath), $asArray); + } + /** + * @return array + */ + protected function groupWhere() + { + $tableName = $this->owner->tableName(); + if ($this->keyNameGroup === null) { + return []; + } else { + return ["{$tableName}.[[{$this->keyNameGroup}]]" => $this->owner->getAttribute($this->keyNameGroup)]; + } + } + + + public function getAllChildrenMP($depth = null, $where = [], $with = null) + { + $tableName = $this->owner->tableName(); + $path = $this->owner->getAttribute($this->keyNamePath); + $query = $this->owner->find() + ->andWhere(['@>', "{$tableName}.[[{$this->keyNamePath}]]", $path]); + + if ($depth > 0) { + $query->andWhere(['<=', "{$tableName}.[[{$this->keyNameDepth}]]", $this->owner->getAttribute($this->keyNameDepth) + $depth]); + } + + $orderBy = []; + $orderBy["{$tableName}.[[{$this->keyNameDepth}]]"] = SORT_ASC; + $orderBy["{$tableName}.[[{$this->keyNameId}]]"] = SORT_ASC; + + if ($where) { + $query->andWhere($where); + } + if ($with) { + $query->with($with); + } + + $query + ->andWhere($this->groupWhere()) + ->addOrderBy($orderBy); + $query->multiple = true; + + return $query; + } + + /* + * ================================ + * AL methods + * ================================ + */ + + /* + * Parent entity (use AL-method) + * @return \yii\db\ActiveRecord + */ + public function getParentAL() { + $parent_id = $this->owner->getAttribute($this->keyNameParentId); + if (empty($parent_id)) + return null; + + $where = [$this->keyNameId => $parent_id]; + if ($this->keyNameGroup) { + $where[$this->keyNameGroup] = $this->owner->getAttribute($this->keyNameGroup); + } + + return $this->owner->find()->where($where)->one(); + } + + /* + * Get parents by AL-method + * @return array + */ + public function getParentsAL() { + $parent_id = $this->owner->getAttribute($this->keyNameParentId); + if ($parent_id == 0) { + return []; + } + + $parent = $this->owner; + $parents = []; + while(true) { + $parent = $parent->getParentAL(); + if (is_null($parent)) + break; + $parents[] = $parent; + } + + return array_reverse($parents); + } + + /* + * Children entities (one-step) (use AL-method) + * @return ActiveQuery + */ + public function getChildrenAL() { + $where = [$this->keyNameParentId => $this->owner->getAttribute($this->keyNameId)]; + if ($this->keyNameGroup) { + $where[$this->keyNameGroup] = $this->owner->getAttribute($this->keyNameGroup); + } + return $this->owner->find()->where($where); + } + + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + /** + * @param array $changedAttributes + * @throws Exception + */ + protected function _rebuildChildren($changedAttributes) + { + $path = isset($changedAttributes[$this->keyNamePath]) ? $changedAttributes[$this->keyNamePath] : $this->owner->getAttribute($this->keyNamePath); + $update = []; + $condition = [ + 'and', + ['@>', "[[{$this->keyNamePath}]]", $path, false], + ]; + if ($this->keyNameGroup !== null) { + $group = isset($changedAttributes[$this->keyNameGroup]) ? $changedAttributes[$this->keyNameGroup] : $this->owner->getAttribute($this->keyNameGroup); + $condition[] = [$this->keyNameGroup => $group]; + } + $params = []; + + if (isset($changedAttributes[$this->keyNamePath])) { + $substringExpr = $this->substringExpression( + "[[{$this->keyNamePath}]]", + 'array_length(:pathOld) + 1', + "array_length([[{$this->keyNamePath}]]) - array_length(:pathOld)" + ); + $update[$this->keyNamePath] = new Expression($this->concatExpression([':pathNew', $substringExpr])); + $params[':pathOld'] = $path; + $params[':pathNew'] = $this->owner->getAttribute($this->keyNamePath); + } + + if ($this->keyNameGroup !== null && isset($changedAttributes[$this->keyNameGroup])) { + $update[$this->keyNameGroup] = $this->owner->getAttribute($this->keyNameGroup); + } + + if ($this->keyNameDepth !== null && isset($changedAttributes[$this->keyNameDepth])) { + $delta = $this->owner->getAttribute($this->keyNameDepth) - $changedAttributes[$this->keyNameDepth]; + $update[$this->keyNameDepth] = new Expression("[[{$this->keyNameDepth}]]" . sprintf('%+d', $delta)); + } + if (!empty($update)) { + $this->owner->updateAll($update, $condition, $params); + } + } + + /** + * @param string $path + * @param string $delimiter + * @param bool $asArray = false + * @return null|string|array + */ + protected static function getParentPathInternal($path, $asArray = false) + { + $path = explode(',', trim($path, '{}')); + array_pop($path); + if ($asArray) { + return $path; + } + return count($path) > 0 ? implode(',', $path) : null; + } + + protected function toLike($path) { + return strtr($path . ',', ['%' => '\%', '_' => '\_', '\\' => '\\\\']) . '%'; + } + + protected function concatExpression($items) + { + if ($this->owner->getDb()->driverName === 'sqlite' || $this->owner->getDb()->driverName === 'pgsql') { + return implode(' || ', $items); + } + return 'CONCAT(' . implode(',', $items) . ')'; + } + + protected function substringExpression($string, $from, $length) + { + if ($this->owner->getDb()->driverName === 'sqlite') { + return "SUBSTR({$string}, {$from}, {$length})"; + } + return "SUBSTRING({$string}, {$from}, {$length})"; + } + + // ======================================================= + public function afterInsert() { + $this->withSave(); + $this->owner->updateAttributes([$this->keyNamePath => $this->owner->getAttribute($this->keyNamePath), $this->keyNameDepth => $this->owner->getAttribute($this->keyNameDepth)]); + } + + public function beforeUpdate() + { + if ($this->owner->getIsNewRecord()) { + throw new NotSupportedException('Method "' . $this->owner->className() . '::insert" is not supported for inserting new entitys.'); + } + $this->withSave(); + } + + protected function withSave() { + $id = $this->owner->getAttribute($this->keyNameId); + $parent_id = $this->owner->getAttribute($this->keyNameParentId); + + if (is_null($parent_id)) { + $parent_id = 0; + } + + // check parent_id value is changed! + /*if ($this->owner->getOldAttribute($this->keyNameParentId) == $parent_id) { + return; + }*/ + + // rebuild parents entities + if ($parent_id == 0) { + $depth = 0; + $path = [intval($id)]; + } else { + $parents = $this->getParentsAL(); + $path = []; + $depth = 0; + foreach ($parents as $entity) { + $path[] = $entity->getAttribute($this->keyNameId); + $depth++; + } + $path[] = intval($id); + } + + $path = '{'. implode(',', $path) .'}'; + + // rebuild children entities (recurcive) +// $this->_rebuildChildren([ +// $this->keyNamePath => $path +// ]); + + $this->owner->setAttribute($this->keyNamePath, $path); +// $this->owner->setAttribute($this->keyNamePath, $path); + $this->owner->setAttribute($this->keyNameDepth, $depth); + } + + public function _recursiveRebuildChildren() { + $children = $this->getChildrenAL()->all(); + $root_path = explode(',', $this->owner->getAttribute($this->keyNamePath)); + $root_depth = $this->owner->getAttribute($this->keyNameDepth); + + /** @var $child ActiveRecord */ + foreach ($children as $child) { + $path = $root_path; + $path[] = $child->getAttribute($this->keyNameId); + $depth = $root_depth + 1; + + $child->_recursiveRebuildChildren(); + } + } +} \ No newline at end of file diff --git a/common/components/artboxtree/ArtboxTreeHelper.php b/common/components/artboxtree/ArtboxTreeHelper.php new file mode 100755 index 0000000..26877e7 --- /dev/null +++ b/common/components/artboxtree/ArtboxTreeHelper.php @@ -0,0 +1,47 @@ +depth+1) . $value; + $result[$key] = $row; + if (!empty($item['children'])) { + self::_recursiveTreeMap($result, $item['children'], $from, $to, $symbol); + } + } + } +} \ No newline at end of file diff --git a/common/components/artboxtree/ArtboxTreeQueryTrait.php b/common/components/artboxtree/ArtboxTreeQueryTrait.php new file mode 100755 index 0000000..048c359 --- /dev/null +++ b/common/components/artboxtree/ArtboxTreeQueryTrait.php @@ -0,0 +1,96 @@ +modelClass; + self::$model = new $class; + } + return self::$model; + } + + public function getTree($group = null, $with = null) { + $model = $this->getModel(); + if ($group !== null) { + $this->andWhere([$model->keyNameGroup => $group]); + } + if ($with) { + $this->with($with); + } + $data = $this->all(); + if (empty($data)) + return []; + + return $this->buildTree($data); + } + + private function _recursiveRebuild($tree, $parentPath = null, $depth = 0) { + $model = $this->getModel(); + + foreach ($tree as $row) { + $path = (is_null($parentPath) ? '' : $parentPath . $model->delimiter) . $row['item']->getAttribute($model->keyNameId); + $row['item']->setAttribute($model->keyNamePath, $path); + $row['item']->setAttribute($model->keyNameDepth, $depth); + $row['item']->save(); + if (!empty($row['children'])) { + $this->_recursiveRebuild($row['children'], $path, $depth+1); + } + } + } + + /** + * @param int $group + */ + public function rebuildMP($group, $with = null) { + $tree = $this->getTree($group, $with); + + $this->_recursiveRebuild($tree); + } + + protected function buildTree(array $data, $parentId = 0) { + $model = $this->getModel(); + + $result = []; + foreach ($data as $element) { + if ($element[$model->keyNameParentId] == $parentId) { + $children = $this->buildTree($data, $element[$model->keyNameId]); + $result[] = [ + 'item' => $element, + 'children' => $children + ]; + } + } + return $result; + } + + public function normalizeTreeData(array $data, $parentId = null) + { + $model = $this->getModel(); + + $result = []; + foreach ($data as $element) { + if ($element[$model->keyNameParentId] == $parentId) { + $result[] = $element; + $children = $this->normalizeTreeData($data, $element[$model->keyNameId]); + if ($children) { + $result = array_merge($result, $children); + } + } + } + return $result; + } +} \ No newline at end of file diff --git a/common/components/artboxtree/ArtboxTreeWidget.php b/common/components/artboxtree/ArtboxTreeWidget.php new file mode 100755 index 0000000..4e74c5e --- /dev/null +++ b/common/components/artboxtree/ArtboxTreeWidget.php @@ -0,0 +1,138 @@ +dataProvider === null) { + throw new InvalidConfigException('The "dataProvider" property must be set.'); + } + if ($this->keyNameId === null) { + throw new InvalidConfigException('The "keyNameId" property must be set.'); + } + if ($this->formatter == null) { + $this->formatter = Yii::$app->getFormatter(); + } elseif (is_array($this->formatter)) { + $this->formatter = Yii::createObject($this->formatter); + } + if (!$this->formatter instanceof Formatter) { + throw new InvalidConfigException('The "formatter" property must be either a Format object or a configuration array.'); + } + } + + /** + * Runs the widget. + */ + public function run() + { + if (!empty($this->assetBundle) && class_exists($this->assetBundle)) { + $view = $this->getView(); + $assetBundle = $this->assetBundle; + $assetBundle::register($view); + } + if ($this->dataProvider->getCount() == 0) { + return $this->renderEmptyResult(); + } + + parent::run(); + } + + protected function renderEmptyResult() { + return empty($this->emptyResult) ? Yii::t('artbox', 'TreeViewEmptyResult') : Yii::t('artbox', $this->emptyResult); + } + + /** + * Normalize tree data + * @param array $data + * @param string $parentId + * @return array + */ + protected function _normalizeTreeData(array $data, $parentId = null) { + $result = []; + foreach ($data as $element) { + if ($element[$this->keyNameParentId] == $parentId) { + $result[] = $element; + $children = $this->_normalizeTreeData($data, $element[$this->keyNameId]); + if ($children) { + $result = array_merge($result, $children); + } + } + } + return $result; + } + + /** + * Hierarchy tree data + * @param array $data + * @param string $parentId + * @return array + */ + protected function _hierarchyTreeData(array $data, $parentId = null) { + $result = []; + foreach ($data as $element) { + if ($element[$this->keyNameParentId] == $parentId) { + $children = $this->_hierarchyTreeData($data, $element[$this->keyNameId]); + $result[] = [ + 'item' => $element, + 'children' => $children + ]; + } + } + return $result; + } +} \ No newline at end of file diff --git a/common/components/artboxtree/treegrid/TreeGridColumn.php b/common/components/artboxtree/treegrid/TreeGridColumn.php new file mode 100755 index 0000000..5474766 --- /dev/null +++ b/common/components/artboxtree/treegrid/TreeGridColumn.php @@ -0,0 +1,250 @@ + + */ +class TreeGridColumn extends Object { + + /** + * @var TreeGrid the grid view object that owns this column. + */ + public $grid; + + /** + * @var string the header cell content. Note that it will not be HTML-encoded. + */ + public $header; + + /** + * @var string the footer cell content. Note that it will not be HTML-encoded. + */ + public $footer; + + /** + * @var callable This is a callable that will be used to generate the content of each cell. + * The signature of the function should be the following: `function ($model, $key, $index, $column)`. + * Where `$model`, `$key`, and `$index` refer to the model, key and index of the row currently being rendered + * and `$column` is a reference to the [[TreeColumn]] object. + */ + public $content; + + /** + * @var boolean whether this column is visible. Defaults to true. + */ + public $visible = true; + + /** + * @var array the HTML attributes for the column group tag. + * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. + */ + public $options = []; + + /** + * @var array the HTML attributes for the header cell tag. + * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. + */ + public $headerOptions = []; + + /** + * @var array|\Closure the HTML attributes for the data cell tag. This can either be an array of + * attributes or an anonymous function ([[Closure]]) that returns such an array. + * The signature of the function should be the following: `function ($model, $key, $index, $column)`. + * Where `$model`, `$key`, and `$index` refer to the model, key and index of the row currently being rendered + * and `$column` is a reference to the [[Column]] object. + * A function may be used to assign different attributes to different rows based on the data in that row. + * + * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. + */ + public $contentOptions = []; + + /** + * @var array the HTML attributes for the footer cell tag. + * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. + */ + public $footerOptions = []; + + /** + * @var string the attribute name associated with this column. When neither [[content]] nor [[value]] + * is specified, the value of the specified attribute will be retrieved from each data model and displayed. + * + * Also, if [[label]] is not specified, the label associated with the attribute will be displayed. + */ + public $attribute; + + /** + * @var string label to be displayed in the [[header|header cell]] and also to be used as the sorting + * link label when sorting is enabled for this column. + * If it is not set and the models provided by the GridViews data provider are instances + * of [[\yii\db\ActiveRecord]], the label will be determined using [[\yii\db\ActiveRecord::getAttributeLabel()]]. + * Otherwise [[\yii\helpers\Inflector::camel2words()]] will be used to get a label. + */ + public $label; + + /** + * @var boolean whether the header label should be HTML-encoded. + * @see label + */ + public $encodeLabel = true; + + /** + * @var string|\Closure an anonymous function or a string that is used to determine the value to display in the current column. + * + * If this is an anonymous function, it will be called for each row and the return value will be used as the value to + * display for every data model. The signature of this function should be: `function ($model, $key, $index, $column)`. + * Where `$model`, `$key`, and `$index` refer to the model, key and index of the row currently being rendered + * and `$column` is a reference to the [[DataColumn]] object. + * + * You may also set this property to a string representing the attribute name to be displayed in this column. + * This can be used when the attribute to be displayed is different from the [[attribute]] that is used for + * sorting and filtering. + * + * If this is not set, `$model[$attribute]` will be used to obtain the value, where `$attribute` is the value of [[attribute]]. + */ + public $value; + + /** + * @var string|array in which format should the value of each data model be displayed as (e.g. `"raw"`, `"text"`, `"html"`, + * `['date', 'php:Y-m-d']`). Supported formats are determined by the [[GridView::formatter|formatter]] used by + * the [[GridView]]. Default format is "text" which will format the value as an HTML-encoded plain text when + * [[\yii\i18n\Formatter]] is used as the [[GridView::$formatter|formatter]] of the GridView. + */ + public $format = 'text'; + + /** + * Renders the header cell. + */ + public function renderHeaderCell() + { + return Html::tag('th', $this->renderHeaderCellContent(), $this->headerOptions); + } + + /** + * Renders the footer cell. + */ + public function renderFooterCell() + { + return Html::tag('td', $this->renderFooterCellContent(), $this->footerOptions); + } + + /** + * Renders a data cell. + * @param mixed $model the data model being rendered + * @param mixed $key the key associated with the data model + * @param integer $index the zero-based index of the data item among the item array returned by [[GridView::dataProvider]]. + * @return string the rendering result + */ + public function renderDataCell($model, $key, $index, $is_first = false, $symbol = '–') + { + if ($this->contentOptions instanceof Closure) { + $options = call_user_func($this->contentOptions, $model, $key, $index, $this); + } else { + $options = $this->contentOptions; + } + return Html::tag('td', ($is_first ? str_repeat($symbol, $model->depth) : '') . $this->renderDataCellContent($model, $key, $index), $options); + } + + /** + * Renders the header cell content. + * The default implementation simply renders [[header]]. + * This method may be overridden to customize the rendering of the header cell. + * @return string the rendering result + */ + protected function renderHeaderCellContent() + { + if ($this->header !== null || $this->label === null && $this->attribute === null) { + return trim($this->header) !== '' ? $this->header : $this->grid->emptyCell; + } + + $provider = $this->grid->dataProvider; + + if ($this->label === null) { + if ($provider instanceof ActiveDataProvider && $provider->query instanceof ActiveQueryInterface) { + /* @var $model Model */ + $model = new $provider->query->modelClass; + $label = $model->getAttributeLabel($this->attribute); + } else { + $models = $provider->getModels(); + if (($model = reset($models)) instanceof Model) { + /* @var $model Model */ + $label = $model->getAttributeLabel($this->attribute); + } else { + $label = Inflector::camel2words($this->attribute); + } + } + } else { + $label = $this->label; + } + + return $this->encodeLabel ? Html::encode($label) : $label; + } + + /** + * Renders the footer cell content. + * The default implementation simply renders [[footer]]. + * This method may be overridden to customize the rendering of the footer cell. + * @return string the rendering result + */ + protected function renderFooterCellContent() + { + return trim($this->footer) !== '' ? $this->footer : $this->grid->emptyCell; + } + + /** + * Renders the data cell content. + * @param mixed $model the data model + * @param mixed $key the key associated with the data model + * @param integer $index the zero-based index of the data model among the models array returned by [[GridView::dataProvider]]. + * @return string the rendering result + */ + protected function renderDataCellContent($model, $key, $index) + { + if ($this->content === null) { + return $this->grid->formatter->format($this->getDataCellValue($model, $key, $index), $this->format); + } else { + if ($this->content !== null) { + return call_user_func($this->content, $model, $key, $index, $this); + } else { + return $this->grid->emptyCell; + } + } + + + } + + /** + * Returns the data cell value. + * @param mixed $model the data model + * @param mixed $key the key associated with the data model + * @param integer $index the zero-based index of the data model among the models array returned by [[GridView::dataProvider]]. + * @return string the data cell value + */ + public function getDataCellValue($model, $key, $index) + { + if ($this->value !== null) { + if (is_string($this->value)) { + return ArrayHelper::getValue($model, $this->value); + } else { + return call_user_func($this->value, $model, $key, $index, $this); + } + } elseif ($this->attribute !== null) { + return ArrayHelper::getValue($model, $this->attribute); + } + return null; + } + +} \ No newline at end of file diff --git a/common/components/artboxtree/treegrid/TreeGridWidget.php b/common/components/artboxtree/treegrid/TreeGridWidget.php new file mode 100755 index 0000000..9996437 --- /dev/null +++ b/common/components/artboxtree/treegrid/TreeGridWidget.php @@ -0,0 +1,277 @@ + 'table table-striped table-bordered']; + + /** + * @var array The plugin options + */ + public $pluginOptions = []; + + /** + * @var boolean whether to show the grid view if [[dataProvider]] returns no data. + */ + public $showOnEmpty = true; + + public $rowOptions = []; + + /** + * @var Closure an anonymous function that is called once BEFORE rendering each data model. + * It should have the similar signature as [[rowOptions]]. The return result of the function + * will be rendered directly. + */ + public $beforeRow; + + /** + * @var Closure an anonymous function that is called once AFTER rendering each data model. + * It should have the similar signature as [[rowOptions]]. The return result of the function + * will be rendered directly. + */ + public $afterRow; + + /** + * @var boolean whether to show the header section of the grid table. + */ + public $showHeader = true; + + /** + * @var array the HTML attributes for the table header row. + * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. + */ + public $headerRowOptions = []; + + /** + * @var boolean whether to show the footer section of the grid table. + */ + public $showFooter = false; + + /** + * @var string the HTML display when the content of a cell is empty + */ + public $emptyCell = ' '; + + public $levelSymbol = '–'; + + /** + * Init the widget object. + */ + public function init() { + parent::init(); + + $this->initColumns(); + } + + /** + * Runs the widget. + */ + public function run() { + $run = parent::run(); + if (!is_null($run)) + return $run; + + if ($this->showOnEmpty || $this->dataProvider->getCount() > 0) { + $pagination = $this->dataProvider->getPagination(); + $pagination->setPageSize($this->dataProvider->getTotalCount()); + + $header = $this->showHeader ? $this->renderTableHeader() : false; + $body = $this->renderItems(); + $footer = $this->showFooter ? $this->renderTableFooter() : false; + + $content = array_filter([ + $header, + $body, + $footer + ]); + + return Html::tag('table', implode("\n", $content), $this->options); + } else { + return $this->renderEmptyResult(); + } + } + + /** + * Renders the table header. + * @return string the rendering result. + */ + public function renderTableHeader() + { + $cells = []; + foreach ($this->columns as $column) { + /* @var $column TreeGridColumn */ + $cells[] = $column->renderHeaderCell(); + } + $content = Html::tag('tr', implode('', $cells), $this->headerRowOptions); + return "\n" . $content . "\n"; + } + + /** + * Renders the table footer. + * @return string the rendering result. + */ + public function renderTableFooter() + { + $cells = []; + foreach ($this->columns as $column) { + /* @var $column TreeGridColumn */ + $cells[] = $column->renderFooterCell(); + } + $content = Html::tag('tr', implode('', $cells), $this->footerRowOptions); + return "\n" . $content . "\n"; + } + + /** + * Renders the data models for the grid view. + */ + public function renderItems() + { + $rows = []; + $models = array_values($this->dataProvider->getModels()); + $keys = $this->dataProvider->getKeys(); + $models = TaxOption::find()->normalizeTreeData($models, $this->rootParentId); + foreach ($models as $index => $model) { + $key = $keys[$index]; + if ($this->beforeRow !== null) { + $row = call_user_func($this->beforeRow, $model, $key, $index, $this); + if (!empty($row)) { + $rows[] = $row; + } + } + + $rows[] = $this->renderTableRow($model, $key, $index); + + if ($this->afterRow !== null) { + $row = call_user_func($this->afterRow, $model, $key, $index, $this); + if (!empty($row)) { + $rows[] = $row; + } + } + } + + if (empty($rows)) { + $colspan = count($this->columns); + return "" . $this->renderEmpty() . ""; + } else { + return implode("\n", $rows); + } + } + + /** + * Renders a table row with the given data model and key. + * @param mixed $model the data model to be rendered + * @param mixed $key the key associated with the data model + * @param integer $index the zero-based index of the data model among the model array returned by [[dataProvider]]. + * @return string the rendering result + */ + public function renderTableRow($model, $key, $index) + { + $cells = []; + /* @var $column TreeGridColumn */ + $i = 0; + foreach ($this->columns as $column) { + $cells[] = $column->renderDataCell($model, $key, $index, $i == 0, $this->levelSymbol); + $i++; + } + if ($this->rowOptions instanceof Closure) { + $options = call_user_func($this->rowOptions, $model, $key, $index, $this); + } else { + $options = $this->rowOptions; + } + $options['data-key'] = is_array($key) ? json_encode($key) : (string) $key; + + $id = ArrayHelper::getValue($model, $this->keyNameId); + Html::addCssClass($options, "treegrid-$id"); + + $parentId = ArrayHelper::getValue($model, $this->keyNameParentId); + if ($parentId) { + Html::addCssClass($options, "treegrid-parent-$parentId"); + } + + return Html::tag('tr', implode('', $cells), $options); + } + + /** + * Creates column objects and initializes them. + */ + protected function initColumns() + { + if (empty($this->columns)) { + $this->guessColumns(); + } + foreach ($this->columns as $i => $column) { + if (is_string($column)) { + $column = $this->createDataColumn($column); + } else { + $column = Yii::createObject(array_merge([ + 'class' => $this->dataColumnClass ? : TreeGridColumn::className(), + 'grid' => $this, + ], $column)); + } + if (!$column->visible) { + unset($this->columns[$i]); + continue; + } + $this->columns[$i] = $column; + } + } + + /** + * Creates a [[DataColumn]] object based on a string in the format of "attribute:format:label". + * @param string $text the column specification string + * @return DataColumn the column instance + * @throws InvalidConfigException if the column specification is invalid + */ + protected function createDataColumn($text) + { + if (!preg_match('/^([^:]+)(:(\w*))?(:(.*))?$/', $text, $matches)) { + throw new InvalidConfigException('The column must be specified in the format of "attribute", "attribute:format" or "attribute:format:label"'); + } + + return Yii::createObject([ + 'class' => $this->dataColumnClass ? : TreeGridColumn::className(), + 'grid' => $this, + 'attribute' => $matches[1], + 'format' => isset($matches[3]) ? $matches[3] : 'text', + 'label' => isset($matches[5]) ? $matches[5] : null, + ]); + } + + /** + * This function tries to guess the columns to show from the given data + * if [[columns]] are not explicitly specified. + */ + protected function guessColumns() + { + $models = $this->dataProvider->getModels(); + $model = reset($models); + if (is_array($model) || is_object($model)) { + foreach ($model as $name => $value) { + $this->columns[] = $name; + } + } + } +} \ No newline at end of file diff --git a/common/components/artboxtree/treelist/TreeListWidget.php b/common/components/artboxtree/treelist/TreeListWidget.php new file mode 100755 index 0000000..a3e2165 --- /dev/null +++ b/common/components/artboxtree/treelist/TreeListWidget.php @@ -0,0 +1,62 @@ +_hierarchyTreeData(array_values($this->dataProvider->getModels()), $this->rootParentId); + return $this->renderTreelist($models); + } + + protected function renderTreelist($models) { + foreach ($models as $index => $model) { + $row = $this->renderTreelistItem($model['item']); + $children = empty($model['children']) ? '' : $this->renderTreelist($model['children']); + $output[] = '
  • '. $row . $children .'
  • '; + } + + if (!empty($output)) + return '
      '. implode("\n", $output) .'
    '; + } + + protected function renderTreelistItem($model) + { + $options = []; + $id = ArrayHelper::getValue($model, $this->keyNameId); + Html::addCssClass($options, "treelistitem-$id"); + + $parent_id = ArrayHelper::getValue($model, $this->keyNameParentId); + if ($parent_id) { + Html::addCssClass($options, "treelistitem-parent-$parent_id"); + } + +// if (is_string($this->value)) { +// return ArrayHelper::getValue($model, $this->value); +// } else { +// return call_user_func($this->value, $model, $key, $index, $this); +// } + + return Html::tag('span', ArrayHelper::getValue($model, $this->displayField), $options); + } +} \ No newline at end of file diff --git a/common/components/artboxtree/treemenu/TreeMenuWidget.php b/common/components/artboxtree/treemenu/TreeMenuWidget.php new file mode 100755 index 0000000..0b66cb8 --- /dev/null +++ b/common/components/artboxtree/treemenu/TreeMenuWidget.php @@ -0,0 +1,62 @@ +_hierarchyTreeData(array_values($this->dataProvider->getModels()), $this->rootParentId); + return $this->renderTreelist($models); + } + + protected function renderTreelist($models) { + foreach ($models as $index => $model) { + $row = $this->renderTreelistItem($model['item']); + $children = empty($model['children']) ? '' : $this->renderTreelist($model['children']); + $output[] = '
  • '. $row . $children .'
  • '; + } + + if (!empty($output)) + return '
      '. implode("\n", $output) .'
    '; + } + + protected function renderTreelistItem($model) + { + $options = []; + $id = ArrayHelper::getValue($model, $this->keyNameId); + Html::addCssClass($options, "treelistitem-$id"); + + $parent_id = ArrayHelper::getValue($model, $this->keyNameParentId); + if ($parent_id) { + Html::addCssClass($options, "treelistitem-parent-$parent_id"); + } + +// if (is_string($this->value)) { +// return ArrayHelper::getValue($model, $this->value); +// } else { +// return call_user_func($this->value, $model, $key, $index, $this); +// } + + return Html::tag('span', ArrayHelper::getValue($model, $this->displayField), $options); + } +} \ No newline at end of file diff --git a/common/components/urlManager/.htaccess b/common/components/urlManager/.htaccess new file mode 100755 index 0000000..cc79a2f --- /dev/null +++ b/common/components/urlManager/.htaccess @@ -0,0 +1,10 @@ +AddDefaultCharset WINDOWS-1251 +#php_value display_errors 1 +#php_value error_reporting 2047 + +RewriteEngine on + + + +RewriteRule ^(.*)(date\.php|votebar|spam|\.css|uploaded|img|rating\.php|forum_comment\.php|js|admin|googlec87a9150150cf5d3.html)(.*)$ $1$2$3 [L] +RewriteRule ^(.*)$ index.php [L] diff --git a/common/components/urlManager/LangRequest.php b/common/components/urlManager/LangRequest.php new file mode 100755 index 0000000..caa4545 --- /dev/null +++ b/common/components/urlManager/LangRequest.php @@ -0,0 +1,17 @@ +urlManager->languages as $lang){ + if(strpos($_SERVER['PHP_SELF'], '/'.$lang))Yii::$app->language = $lang; + } + return parent::resolvePathInfo(); + } +} \ No newline at end of file diff --git a/common/components/urlManager/LangUrlManager.php b/common/components/urlManager/LangUrlManager.php new file mode 100755 index 0000000..0cf85ad --- /dev/null +++ b/common/components/urlManager/LangUrlManager.php @@ -0,0 +1,30 @@ +langParam])){ if(Yii::$app->language != $this->lang)$params[$this->langParam]=Yii::$app->language;} + else if($params[$this->langParam] == $this->lang)unset($params[$this->langParam]); + return parent::createUrl($params); + } + //put your code here +} \ No newline at end of file diff --git a/common/components/urlManager/LangUrlRule.php b/common/components/urlManager/LangUrlRule.php new file mode 100755 index 0000000..31c93ae --- /dev/null +++ b/common/components/urlManager/LangUrlRule.php @@ -0,0 +1,61 @@ +getRequest()->getPreferredLanguage(); + //if language pass via url use it + if(isset($_GET[$this->langParam])&&in_array($_GET[$this->langParam],$this->languages)){ + Yii::app()->language=$_GET[$this->langParam]; + //else if preffered language is allowed + }elseif(in_array($userLang,$this->languages)) { + Yii::app()->language=$userLang; + //else use the first language from the list + }else Yii::app()->language=$this->lang; + + }*/ + //put your code here + + public function init(){ + print '=='; + print Yii::$app->getRequest()->getQueryParam('language'); + return parent::init(); + } + public function createUrl($params=array()){ + $userLang=Yii::$app->getRequest()->getPreferredLanguage(); + //if language pass via url use it + if(isset($_GET[$this->langParam])&&in_array($_GET[$this->langParam],$this->languages)){ + Yii::$app->language=$_GET[$this->langParam]; + //else if preffered language is allowed + }elseif(in_array($userLang,$this->languages)) { + Yii::$app->language=$userLang; + //else use the first language from the list + }else Yii::$app->language=$this->lang; + + //print_r($_GET); + if(!isset($params[$this->langParam])){ if(Yii::$app->language != $this->lang)$params[$this->langParam]=Yii::$app->language;} + else if($params[$this->langParam] == $this->lang)unset($params[$this->langParam]); + //print_r($params); + return parent::createUrl($params); + } + //put your code here +} \ No newline at end of file diff --git a/common/config/.gitignore b/common/config/.gitignore new file mode 100755 index 0000000..bfabe93 --- /dev/null +++ b/common/config/.gitignore @@ -0,0 +1,2 @@ +main-local.php +params-local.php diff --git a/common/config/bootstrap.php b/common/config/bootstrap.php new file mode 100755 index 0000000..8a3c9bc --- /dev/null +++ b/common/config/bootstrap.php @@ -0,0 +1,9 @@ + 'ru', + 'vendorPath' => dirname(dirname(__DIR__)) . '/vendor', + 'controllerMap' => [ +// 'artbox-comment' => [ +// 'class' => \common\modules\comment\Controller::className(), +// ], + ], + 'components' => [ + 'cache' => [ + 'class' => 'yii\caching\MemCache', + 'keyPrefix' => 'linija_' + ], + 'sms' => [ + 'class' => 'common\components\SmsSender', + ], + + 'i18n' => [ + 'translations' => [ + '*' => [ + 'class' => 'yii\i18n\PhpMessageSource', + 'basePath' => '@common/translation', + 'fileMap' => [ + 'app' => 'app.php', + 'app/error' => 'error.php', + ], + ], + 'app' => [ + 'class' => 'yii\i18n\PhpMessageSource', + 'basePath' => '@common/translation', + 'fileMap' => [ + 'app' => 'app.php', + 'app/error' => 'error.php', + ], + ], + 'artbox-comment' => [ + 'class' => 'yii\i18n\PhpMessageSource', + 'basePath' => '@common/modules/comment/messages', + ], + ], + ], + 'artboximage' => [ + 'class' => 'common\components\artboximage\ArtboxImage', + 'driver' => 'GD', //GD or Imagick + 'rootPath' => Yii::getAlias('@storage'), + 'rootUrl' => Yii::getAlias('/storage'), + 'presets' => [ + 'product' => [ + 'resize' => [ + 'width' => 300, + 'height' => 300, + 'master' => null + ], + ], + 'product_variant' => [ + 'resize' => [ + 'width' => 38, + 'height' => 38, + 'master' => null + ], + ], + 'product_trumb' => [ + 'resize' => [ + 'width' => 88, + 'height' => 88, + 'master' => null + ], + ], + 'product_basket' => [ + 'resize' => [ + 'width' => 100, + 'height' => 200, + 'master' => null + ], + ], + 'product_view' => [ + 'resize' => [ + 'width' => 392, + 'height' => 365, + 'master' => null + ], + ], + 'iam' => [ + 'resize' => [ + 'width' => 120, + 'height' => 240, + 'master' => null + ], + ], + 'slider' => [ + 'resize' => [ + 'width' => 1920, + 'height' => 420, + 'master' => null + ], + ], + 'brandlist' => [ + 'resize' => [ + 'width' => 128, + 'height' => 128, + 'master' => null + ], + ], + 'eventlist' => [ + 'resize' => [ + 'width' => 180, + 'height' => 125, + 'master' => null + ], + ], + 'event_in_product' => + [ + 'resize' => [ + 'width' => 730, + 'height' => 100, + 'master' => null + ], + ], + 'event_left' => + [ + 'resize' => [ + 'width' => 1140, + 'master' => null + ], + ], + 'brand_item' => [ + 'resize' => [ + 'width' => 125, + 'height' => 54, + 'master' => null + ], + 'crop' => [ + 'width' => 150, + 'height' => 150, + 'master' => null + ], + ], + 'mainmenu' => [ + 'resize' => [ + 'width' => 160, + 'height' => 170, + 'master' => null + ], + ], + 'list' => [ + 'resize' => [ + 'width' => 134, + 'height' => 200, + 'master' => null + ], + ], + 'banner_list' => [ + 'resize' => [ + 'width' => 105, + 'height' => 25, + 'master' => null + ], + ], + 'large' => [ + 'resize' => [ + 'width' => 600, + 'height' => 600, + 'master' => null + ], + ], + 'admin_thumb' => [ + 'resize' => [ + 'width' => 256, + ], + ], + 'option_menu' => [ + 'resize' => [ + 'width' => 100, + 'height' => 110, + ], + ], + 'product_show'=>[ + 'resize' => [ + 'width' => 342, + 'height' => 350, + ], + ] + ] + ], + 'basket' => [ + 'class' => 'common\models\Basket', + ], + ], + + 'modules' => [ + 'file' => [ + 'class' => 'common\modules\file\Module', + ], + 'artbox-comment' => [ + 'class' => 'common\modules\comment\Module', + ], + ], +]; diff --git a/common/config/params.php b/common/config/params.php new file mode 100755 index 0000000..446a650 --- /dev/null +++ b/common/config/params.php @@ -0,0 +1,6 @@ + 'admin@example.com', + 'supportEmail' => 'support@example.com', + 'user.passwordResetTokenExpire' => 3600, +]; diff --git a/common/mail/layouts/html.php b/common/mail/layouts/html.php new file mode 100755 index 0000000..accc6cf --- /dev/null +++ b/common/mail/layouts/html.php @@ -0,0 +1,22 @@ + +beginPage() ?> + + + + + <?= Html::encode($this->title) ?> + head() ?> + + + beginBody() ?> + + endBody() ?> + + +endPage() ?> diff --git a/common/mail/layouts/text.php b/common/mail/layouts/text.php new file mode 100755 index 0000000..968f894 --- /dev/null +++ b/common/mail/layouts/text.php @@ -0,0 +1,12 @@ + +beginPage() ?> +beginBody() ?> + +endBody() ?> +endPage() ?> diff --git a/common/mail/passwordResetToken-html.php b/common/mail/passwordResetToken-html.php new file mode 100755 index 0000000..24e8de9 --- /dev/null +++ b/common/mail/passwordResetToken-html.php @@ -0,0 +1,15 @@ +urlManager->createAbsoluteUrl(['site/reset-password', 'token' => $user->password_reset_token]); +?> +
    +

    Hello username) ?>,

    + +

    Follow the link below to reset your password:

    + +

    +
    diff --git a/common/mail/passwordResetToken-text.php b/common/mail/passwordResetToken-text.php new file mode 100755 index 0000000..0905f76 --- /dev/null +++ b/common/mail/passwordResetToken-text.php @@ -0,0 +1,12 @@ +urlManager->createAbsoluteUrl(['site/reset-password', 'token' => $user->password_reset_token]); +?> +Hello username ?>, + +Follow the link below to reset your password: + + diff --git a/common/models/ArticleToRating.php b/common/models/ArticleToRating.php new file mode 100755 index 0000000..44b3be6 --- /dev/null +++ b/common/models/ArticleToRating.php @@ -0,0 +1,58 @@ + true, 'targetClass' => Articles::className(), 'targetAttribute' => ['articles_id' => 'id']], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'article_to_rating_id' => 'Article To Rating ID', + 'articles_id' => 'Articles ID', + 'value' => 'Value', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getArticles() + { + return $this->hasOne(Articles::className(), ['id' => 'articles_id']); + } +} diff --git a/common/models/Articles.php b/common/models/Articles.php new file mode 100755 index 0000000..e68dc66 --- /dev/null +++ b/common/models/Articles.php @@ -0,0 +1,124 @@ + SaveImgBehavior::className(), + 'fields' => [ + ['name'=>'image','directory' => 'articles' ] + ] + ], + 'slug' => [ + 'class' => 'common\behaviors\Slug', + 'in_attribute' => 'title', + 'out_attribute' => 'translit', + 'translit' => true + ], + ]; + } + + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['date'], 'safe'], + [['title', 'body'], 'required'], + [['body', 'seo_text'], 'string'], + [['title', 'image', 'translit', 'meta_title', 'meta_keywords', 'meta_description', 'h1'], 'string', 'max' => 255], + [['imageUpload'], 'safe'], + [['imageUpload'], 'file', 'extensions' => 'jpg, gif, png'], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'date' => 'Date', + 'title' => 'Title', + 'body' => 'Body', + 'image' => 'Image', + 'imageUrl' => Yii::t('app', 'Image'), + 'translit' => 'Translit', + 'meta_title' => 'Meta Title', + 'meta_keywords' => 'Meta Keywords', + 'meta_description' => 'Meta Description', + 'seo_text' => 'Seo Text', + 'h1' => 'H1', + ]; + } + + public function recalculateRating() { + /** + * @var ArticleToRating $averageRating + */ + $average = $this->getComments()->joinWith('rating')->select(['average' => 'avg(artbox_comment_rating.value)::float'])->scalar(); + if(!$average) { + $average = 0; + } + $averageRating = $this->averageRating; + if(!empty($averageRating)) { + $averageRating->value = $average; + } else { + $averageRating = new ArticleToRating(['articles_id' => $this->id, 'value' => $average]); + } + if($averageRating->save()) { + return true; + } else { + return false; + } + } + + public function getComments() { + return $this->hasMany(CommentModel::className(), ['entity_id' => 'id'])->where(['artbox_comment.entity' => self::className(), 'artbox_comment.status' => CommentModel::STATUS_ACTIVE, 'artbox_comment.artbox_comment_pid' => NULL]); + } + + public function getAverageRating() { + return $this->hasOne(ArticleToRating::className(), ['articles_id' => 'id']); + } +} diff --git a/common/models/ArticlesSearch.php b/common/models/ArticlesSearch.php new file mode 100755 index 0000000..686dca2 --- /dev/null +++ b/common/models/ArticlesSearch.php @@ -0,0 +1,78 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'id' => $this->id, + 'date' => $this->date, + ]); + + $query->andFilterWhere(['like', 'title', $this->title]) + ->andFilterWhere(['like', 'body', $this->body]) + ->andFilterWhere(['like', 'image', $this->image]) + ->andFilterWhere(['like', 'translit', $this->translit]) + ->andFilterWhere(['like', 'meta_title', $this->meta_title]) + ->andFilterWhere(['like', 'meta_keywords', $this->meta_keywords]) + ->andFilterWhere(['like', 'meta_description', $this->meta_description]) + ->andFilterWhere(['like', 'seo_text', $this->seo_text]) + ->andFilterWhere(['like', 'h1', $this->h1]); + + return $dataProvider; + } +} diff --git a/common/models/Banner.php b/common/models/Banner.php new file mode 100755 index 0000000..b607360 --- /dev/null +++ b/common/models/Banner.php @@ -0,0 +1,85 @@ + SaveImgBehavior::className(), + 'fields' => [ + ['name'=>'image','directory' => 'banner' ] + ] + ], + ]; + } + + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['status', 'width', 'height'], 'integer'], + [['image', 'alt', 'title', 'url'], 'string', 'max' => 255], + [['width', 'height'], 'required'], + ['title', 'unique', 'targetClass' => '\common\models\Slider', 'message' => Yii::t('app','message',[ + 'field' => 'Title' + ])], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'banner_id' => Yii::t('app', 'status'), + 'image' => Yii::t('app', 'image'), + 'alt' => Yii::t('app', 'alt'), + 'title' => Yii::t('app', 'title'), + 'url' => Yii::t('app', 'url'), + 'status' => Yii::t('app', 'status'), + 'width' => Yii::t('app', 'width'), + 'height' => Yii::t('app', 'height'), + ]; + } + + static function getFileExtension ($filename) + { + $ext = explode ('.', $filename); + + return end ($ext); + } +} diff --git a/common/models/BannerSearch.php b/common/models/BannerSearch.php new file mode 100755 index 0000000..32929ba --- /dev/null +++ b/common/models/BannerSearch.php @@ -0,0 +1,73 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'banner_id' => $this->banner_id, + 'status' => $this->status, + ]); + + $query->andFilterWhere(['like', 'image', $this->image]) + ->andFilterWhere(['like', 'alt', $this->alt]) + ->andFilterWhere(['like', 'title', $this->title]) + ->andFilterWhere(['like', 'url', $this->url]); + + return $dataProvider; + } +} diff --git a/common/models/Basket.php b/common/models/Basket.php new file mode 100755 index 0000000..b54b0a1 --- /dev/null +++ b/common/models/Basket.php @@ -0,0 +1,125 @@ +session = \Yii::$app->session; + if(!$this->session->has('basket')) { + $this->session->set('basket', [ ]); + } + parent::__construct($config); + } + + public function add(int $product_variant_id, int $count) + { + $data = $this->getData(); + if(array_key_exists($product_variant_id, $data)) { + $data[ $product_variant_id ][ 'count' ] += $count; + if($data[$product_variant_id]['count'] <= 0) { + unset($data[$product_variant_id]); + } + } else { + $model = $this->findModel($product_variant_id); + $data[ $product_variant_id ] = [ + 'price' => $model->price, + 'count' => $count, + ]; + } + $this->setData($data); + } + + public function set(int $product_variant_id, int $count) + { + $data = $this->getData(); + if(array_key_exists($product_variant_id, $data)) { + $data[ $product_variant_id ][ 'count' ] = $count; + if($data[$product_variant_id]['count'] <= 0) { + unset($data[$product_variant_id]); + } + } elseif($count > 0) { + $model = $this->findModel($product_variant_id); + $data[ $product_variant_id ] = [ + 'price' => $model->price, + 'count' => $count, + ]; + } + $this->setData($data); + } + + public function delete(int $product_variant_id) { + $this->set($product_variant_id, 0); + } + + public function getData(): array + { + return $this->session->get('basket'); + } + + public function getItem(int $product_variant_id) { + $data = $this->getData(); + if(!empty($data[$product_variant_id])) { + return $data[$product_variant_id]; + } else { + return false; + } + } + + public function setData(array $data) + { + $this->session->set('basket', $data); + } + + public function getSum(): float + { + $data = $this->getData(); + $sum = 0; + foreach($data as $item) { + $sum += $item[ 'price' ] * $item[ 'count' ]; + } + return $sum; + } + + public function getCount(): int { + $data = $this->getData(); + return count($data); + } + + public function findModel(int $product_variant_id): ProductVariant + { + $model = ProductVariant::find() + ->where([ 'product_variant_id' => $product_variant_id ]) + ->one(); + if(empty( $model )) { + throw new NotFoundHttpException('Product not found'); + } else { + return $model; + } + } + + public function findModels(array $product_variant_ids) + { + return ProductVariant::find() + ->where([ 'product_variant_id' => $product_variant_ids ]) + ->with([ + 'product', + 'image', + ]) + ->all(); + } + + public function clear() + { + $this->setData([]); + } + + } \ No newline at end of file diff --git a/common/models/Bg.php b/common/models/Bg.php new file mode 100755 index 0000000..da07740 --- /dev/null +++ b/common/models/Bg.php @@ -0,0 +1,66 @@ + SaveImgBehavior::className(), + 'fields' => [ + ['name'=>'image','directory' => 'bg' ] + ] + ], + ]; + } + + public function rules() + { + return [ + [['title'], 'required'], + [['old_image','url'], 'safe'], + [['image'], 'file', 'extensions'=>'jpg, gif, png', 'skipOnEmpty'=>true], + + ]; + } + + public function attributeLabels() + { + return [ + 'title'=>'Название', + 'body'=>'Описание', + 'date'=>'Дата', + 'image'=>'Изображения', + ]; + } + + + + public function beforeDelete() { + $this->deleteImage($this->image); + return parent::beforeDelete(); + } + + public function deleteImage($file){ + if(!empty($file)){ + @unlink('upload/bg/'.$file); + } + } + + +} + diff --git a/common/models/BgSearch.php b/common/models/BgSearch.php new file mode 100755 index 0000000..485aa6e --- /dev/null +++ b/common/models/BgSearch.php @@ -0,0 +1,71 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'id' => $this->id, + ]); + + $query->andFilterWhere(['like', 'title', $this->title]) + ->andFilterWhere(['like', 'url', $this->url]) + ->andFilterWhere(['like', 'image', $this->image]); + + return $dataProvider; + } +} diff --git a/common/models/Blog.php b/common/models/Blog.php new file mode 100755 index 0000000..1cf7239 --- /dev/null +++ b/common/models/Blog.php @@ -0,0 +1,121 @@ + BlameableBehavior::className(), + 'createdByAttribute' => 'user_id', + 'updatedByAttribute' => false, + ], + [ + 'class' => TimestampBehavior::className(), + 'createdAtAttribute' => 'date_add', + 'updatedAtAttribute' => false, + 'value' => new Expression('NOW()'), + ], + 'slug' => [ + 'class' => 'common\behaviors\Slug', + 'in_attribute' => 'name', + 'out_attribute' => 'link', + 'translit' => true + ] + ]; + } + + /** + * @inheritdoc + */ + public function rules() + { + return [ + [ + [ 'name', 'description' ], + 'required', + ], + [ + [ 'description' ], + 'string', + ], + [ + [ + 'name', + 'link', + 'cover', + ], + 'string', + 'max' => 255, + ], + [['imageUpload'], 'safe'], + [['imageUpload'], 'file', 'extensions' => 'jpg, gif, png'], + ]; + } + + public function getDateCreate(){ + return date('Y-m-d',strtotime($this->date_add)); + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'blog_id' => Yii::t('app', 'blog_id'), + 'user_id' => Yii::t('app', 'user_id'), + 'name' => Yii::t('app', 'name'), + 'link' => Yii::t('app', 'link'), + 'date_add' => Yii::t('app', 'date_add'), + 'user_add_id' => Yii::t('app', 'user_add_id'), + 'view_count' => Yii::t('app', 'view_count'), + 'description' => Yii::t('app', 'description'), + 'cover' => Yii::t('app', 'cover'), + 'image' => Yii::t('app', 'cover'), + 'imageUrl' => Yii::t('app', 'cover'), + ]; + } + + public function getImageFile() { + return empty($this->image) ? null : Yii::getAlias('@imagesDir/brands/'. $this->image); + } + + public function getImageUrl() + { + return empty($this->image) ? null : Yii::getAlias('@imagesUrl/brands/' . $this->image); + } + } diff --git a/common/models/BlogSearch.php b/common/models/BlogSearch.php new file mode 100755 index 0000000..b82adb0 --- /dev/null +++ b/common/models/BlogSearch.php @@ -0,0 +1,135 @@ + date('Y-m-d', 0), + ], + [ + [ + 'date_add_to', + ], + 'default', + 'value' => date('Y-m-d'), + ], + ]; + } + + /** + * @inheritdoc + */ + public function scenarios() + { + // bypass scenarios() implementation in the parent class + return Model::scenarios(); + } + + /** + * Creates data provider instance with search query applied + * + * @param array $params + * + * @return ActiveDataProvider + */ + public function search($params) + { + $query = Blog::find(); + + // add conditions that should always apply here + + $dataProvider = new ActiveDataProvider([ + 'query' => $query, + ]); + + $this->load($params); + + if(!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + $query->andWhere([ 'user_id' => \Yii::$app->user->getId() ]); + + // grid filtering conditions + $query->andFilterWhere([ + 'blog_id' => $this->blog_id, + 'date_add' => $this->date_add, + 'user_add_id' => $this->user_add_id, + 'view_count' => $this->view_count, + ]); + + $query->andFilterWhere([ + 'between', + 'date_add', + $this->date_add_from, + (new \DateTime($this->date_add_to))->modify('+1 day')->format('Y-m-d') + ]); + + $query->andFilterWhere([ + 'like', + 'name', + $this->name, + ]) + ->andFilterWhere([ + 'like', + 'description', + $this->description, + ]) + ->andFilterWhere([ + 'like', + 'cover', + $this->cover, + ]); + + return $dataProvider; + } + + } diff --git a/common/models/Customer.php b/common/models/Customer.php new file mode 100755 index 0000000..d64fd12 --- /dev/null +++ b/common/models/Customer.php @@ -0,0 +1,112 @@ + '10'], + [['username', 'name', 'surname', 'phone', 'email', 'password_reset_token'], 'string', 'max' => 255], + [['gender', 'auth_key'], 'string', 'max' => 32], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'username' => 'Username', + 'name' => 'Name', + 'surname' => 'Surname', + 'phone' => 'Phone', + 'date_time' => 'Date Time', + 'gender' => 'Gender', + 'birth_day' => 'Birth Day', + 'birth_month' => 'Birth Month', + 'birth_year' => 'Birth Year', + 'body' => 'Body', + 'group_id' => 'Group ID', + 'email' => 'Email', + 'auth_key' => 'Auth Key', + 'password_reset_token' => 'Password Reset Token', + 'status' => 'Status', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getShares() + { + return $this->hasMany(Share::className(), ['user_id' => 'id']); + } + + /** + * Finds user by email + * + * @param string $email + * @return static|null + */ + public static function findByEmail($email) + { + return static::findOne(['email' => $email, 'status' => self::STATUS_ACTIVE]); + } + + public function getName(){ + return $this->username. ' '.$this->surname; + } + + +} diff --git a/common/models/CustomerSearch.php b/common/models/CustomerSearch.php new file mode 100755 index 0000000..ab3b5d2 --- /dev/null +++ b/common/models/CustomerSearch.php @@ -0,0 +1,82 @@ + '10'], + [['username', 'name', 'surname', 'phone', 'email', 'password_reset_token','username', 'password_hash'], 'string', 'max' => 255], + [['gender', 'auth_key'], 'string', 'max' => 32], + ]; + } + + /** + * @inheritdoc + */ + public function scenarios() + { + // bypass scenarios() implementation in the parent class + return Model::scenarios(); + } + + /** + * Creates data provider instance with search query applied + * + * @param array $params + * + * @return ActiveDataProvider + */ + public function search($params) + { + $query = Customer::find(); + + // add conditions that should always apply here + + $dataProvider = new ActiveDataProvider([ + 'query' => $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'id' => $this->id, + 'date_time' => $this->date_time, + 'birth_day' => $this->birth_day, + 'birth_month' => $this->birth_month, + 'birth_year' => $this->birth_year, + 'group_id' => $this->group_id, + ]); + + $query->andFilterWhere(['like', 'username', $this->username]) + ->andFilterWhere(['like', 'name', $this->name]) + ->andFilterWhere(['like', 'surname', $this->surname]) + ->andFilterWhere(['like', 'phone', $this->phone]) + ->andFilterWhere(['like', 'body', $this->body]); + + return $dataProvider; + } +} diff --git a/common/models/Delivery.php b/common/models/Delivery.php new file mode 100755 index 0000000..d1a9304 --- /dev/null +++ b/common/models/Delivery.php @@ -0,0 +1,12 @@ +[ + 'class' => SaveImgBehavior::className(), + 'fields' => [ + ['name'=>'imageUpload','directory' => 'event' ], + ['name'=>'banner','directory' => 'event' ], + ] + ], + TimestampBehavior::className(), + 'slug' => [ + 'class' => 'common\behaviors\Slug', + 'in_attribute' => 'name', + 'out_attribute' => 'alias', + 'translit' => true + ], + [ + 'class' => 'common\behaviors\ShowImage', + ], + ]; + } + + + public function beforeSave($insert) + { + if (parent::beforeSave($insert)) { + + $this->end_at = !empty($this->end_at) ? strtotime($this->end_at) : ''; + return true; + } else { + return false; + } + } + + public function afterFind(){ + $this->end_at = !empty($this->end_at) ? date("Y-m-d", $this->end_at) : ''; + } + + + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['body', 'seo_text'], 'string'], + [['created_at', 'updated_at','percent' ], 'integer'], + [['name', 'alias', 'image', 'meta_title', 'description', 'h1','end_at','banner'], 'string', 'max' => 255], + [['name','body'], 'required'], + [['imageUpload','sale','is_event'], 'safe'], + [['imageUpload'], 'file', 'extensions' => 'jpg, gif, png'], + [['products_file'], 'file'], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'event_id' => Yii::t('app', 'ID акции'), + 'name' => Yii::t('app', 'name'), + 'alias' => Yii::t('app', 'alias'), + 'body' => Yii::t('app', 'body'), + 'image' => Yii::t('app', 'image'), + 'meta_title' => Yii::t('app', 'meta_title'), + 'description' => Yii::t('app', 'description'), + 'h1' => Yii::t('app', 'h1'), + 'seo_text' => Yii::t('app', 'seo_text'), + 'created_at' => Yii::t('app', 'created_at'), + 'updated_at' => Yii::t('app', 'updated_at'), + 'end_at' => Yii::t('app', 'end_at'), + 'status' => Yii::t('app', 'Статус акции'), + 'products_file' => Yii::t('app', 'Загрузка файла'), + 'sale' => Yii::t('app', 'Распродажа'), + 'percent' => Yii::t('app', 'Процент'), + 'is_event' => Yii::t('app', 'Акция'), + ]; + } + + + public function isActive(){ + if($this->status){ + + if(!empty($this->end_at) && (strtotime($this->end_at) <= strtotime(date("Y-m-d")))){ + return false; + } + return true; + } + return false; + } + + + + public function getProducts(){ + return $this->hasMany(Product::className(),['product_id' => 'product_id'] )->viaTable('events_to_products', ['event_id' => 'event_id']); + } + + public static function getSaleEvents(){ + return ArrayHelper::toArray(self::find()->select('percent')->distinct('percent')->where('sale=true AND percent IS NOT NULL')->orderBy('percent')->all()); + } + + +} diff --git a/common/models/EventSearch.php b/common/models/EventSearch.php new file mode 100755 index 0000000..60c85b9 --- /dev/null +++ b/common/models/EventSearch.php @@ -0,0 +1,83 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'event_id' => $this->event_id, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'end_at' => $this->end_at, + ]); + + $query->andFilterWhere(['like', 'name', $this->name]) + ->andFilterWhere(['like', 'alias', $this->alias]) + ->andFilterWhere(['like', 'body', $this->body]) + ->andFilterWhere(['like', 'image', $this->image]) + ->andFilterWhere(['like', 'meta_title', $this->meta_title]) + ->andFilterWhere(['like', 'description', $this->description]) + ->andFilterWhere(['like', 'h1', $this->h1]) + ->andFilterWhere(['like', 'seo_text', $this->seo_text]); + + return $dataProvider; + } +} diff --git a/common/models/EventsToProducts.php b/common/models/EventsToProducts.php new file mode 100755 index 0000000..c3cb5cb --- /dev/null +++ b/common/models/EventsToProducts.php @@ -0,0 +1,68 @@ + true, 'targetClass' => Event::className(), 'targetAttribute' => ['event_id' => 'event_id']], + [['product_id'], 'exist', 'skipOnError' => true, 'targetClass' => Product::className(), 'targetAttribute' => ['product_id' => 'product_id']], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'events_to_products_id' => 'Events To Products ID', + 'event_id' => 'Event ID', + 'product_id' => 'Product ID', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getEvent() + { + return $this->hasOne(Event::className(), ['event_id' => 'event_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getProduct() + { + return $this->hasOne(Product::className(), ['product_id' => 'product_id']); + } +} diff --git a/common/models/Feedback.php b/common/models/Feedback.php new file mode 100755 index 0000000..7b190d6 --- /dev/null +++ b/common/models/Feedback.php @@ -0,0 +1,94 @@ + ['name', 'phone'], + self::SCENARIO_CALLBACK => ['phone'], + ]); + return $scenarios; + } + + /** + * @inheritdoc + */ + public function behaviors() + { + return [ + [ + 'class' => TimestampBehavior::className(), + 'createdAtAttribute' => 'date_add', + 'updatedAtAttribute' => false, + ], + [ + 'class' => AttributeBehavior::className(), + 'attributes' => [ + ActiveRecord::EVENT_BEFORE_INSERT => 'ip', + ], + 'value' => function($event) { + return \Yii::$app->request->userIP; + }, + ] + ]; + } + + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['phone', 'name'], 'required'], + [['phone'], 'match', 'pattern' => '/^\+38\(\d{3}\)\d{3}-\d{2}-\d{2}$/'], + [['name', 'phone'], 'string', 'max' => 255], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'feedback_id' => Yii::t('app', 'Feedback ID'), + 'name' => Yii::t('app', 'Имя'), + 'phone' => Yii::t('app', 'Телефон'), + 'date_add' => Yii::t('app', 'Date Add'), + 'ip' => Yii::t('app', 'Ip'), + ]; + } +} diff --git a/common/models/FeedbackSearch.php b/common/models/FeedbackSearch.php new file mode 100755 index 0000000..f578091 --- /dev/null +++ b/common/models/FeedbackSearch.php @@ -0,0 +1,88 @@ + $query, + ]); + + $this->load($params); + + if(!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'feedback_id' => $this->feedback_id, + ]); + + $query->andFilterWhere([ + 'like', + 'name', + $this->name, + ]) + ->andFilterWhere([ + 'like', + 'phone', + $this->phone, + ]) + ->andFilterWhere([ + 'like', + 'ip', + $this->ip, + ]); + + return $dataProvider; + } + } diff --git a/common/models/Fields.php b/common/models/Fields.php new file mode 100755 index 0000000..3db277b --- /dev/null +++ b/common/models/Fields.php @@ -0,0 +1,155 @@ + 255] + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'table_name' => 'Model Name', + 'table_id' => 'Model ID', + 'value' => 'Value', + 'field_name' => 'Field Name', + 'language' => 'Language', + ]; + } + + public static function getData($id, $model, $type){ + $data = ArrayHelper::toArray(self::find()->where(['table_id'=>$id, 'table_name'=>$model, 'field_type'=>$type])->all()); + $result = []; + for($i=0; $i < count($data); $i ++){ + $result[$data[$i]['parent_key']][$data[$i]['field_name']] = $data[$i]['value']; + } + + return $result; + } + + + /** + * @param $post - array with field data + * @param $table_id - row id in model table + * @param $table_name - madel table name + * @param $language - language id + */ + + public static function saveFieldData($post,$table_id,$table_name, $language){ + + self::deleteAll(['table_id'=>$table_id, 'table_name'=>$table_name, 'language' => $language, 'field_type' => array_keys($post)]); + + if($post){ + + + foreach($post as $k => $field){ + + + + foreach($field as $parent_key => $row){ + + foreach($row as $key => $value){ + + $field_model = new Fields(); + $field_model->field_name = array_keys($value)[0]; + $field_model->value = $value[array_keys($value)[0]]; + $field_model->table_name = $table_name; + $field_model->table_id = $table_id; + $field_model->field_type = $k; + $field_model->language = 'ru'; + $field_model->parent_key = $parent_key; + $field_model->key = $key; + $field_model->save(); + } + + } + } + } + } + + + /** + * @param $post - array with field data + * @param $table_id - row id in model table + * @param $table_name - madel table name + * @param $language - language id + */ + + public static function saveFieldVideoData($post,$table_id,$table_name, $language){ + + self::deleteAll(['table_id'=>$table_id, 'table_name'=>$table_name, 'language' => $language, 'field_type' => array_keys($post)]); + + if($post){ + + + foreach($post as $k => $field){ + + + + foreach($field as $parent_key => $row){ + + foreach($row as $key => $value){ + + preg_match('/src=\"(.[^"]*)\"/', $value[array_keys($value)[0]], $video_url); + + if(isset($video_url[1]) && !empty($video_url[1])){ + + $field_model = new Fields(); + $field_model->field_name = array_keys($value)[0]; + $field_model->value = $video_url[1].'?showinfo=0&autoplay=0'; + $field_model->table_name = $table_name; + $field_model->table_id = $table_id; + $field_model->field_type = $k; + $field_model->language = 'ru'; + $field_model->parent_key = $parent_key; + $field_model->key = $key; + $field_model->save(); + + } + + + } + + } + } + } + } +} diff --git a/common/models/FilterCache.php b/common/models/FilterCache.php new file mode 100644 index 0000000..81ee210 --- /dev/null +++ b/common/models/FilterCache.php @@ -0,0 +1,88 @@ + 'ID', + 'options_key' => 'Options Key', + 'category_id' => 'Category ID', + 'depth' => 'Depth', + 'count' => 'Count', + ]; + } + + /** + * @param array $optionsIdArray + * @return string + */ + static function createCacheKey($optionsIdArray){ + if(!empty($optionsIdArray)){ + sort($optionsIdArray); + $string = implode('',$optionsIdArray); + $key = md5($string); + return $key; + } else { + return 0; + } + } + + + /** + * @param $groups + * @param $params + * @return array + */ + + static function convertAliasToId($groups,$params){ + $optionsAlias = ArrayHelper::index($groups, 'option_alias'); + $convertedParams = []; + foreach($params as $key => $options){ + foreach($options as $option){ + if(isset($optionsAlias[$option]) && !in_array($optionsAlias[$option]['tax_option_id'],$convertedParams)){ + $convertedParams[] = $optionsAlias[$option]['tax_option_id']; + } + } + } + return $convertedParams; + + } + +} diff --git a/common/models/LoginForm.php b/common/models/LoginForm.php new file mode 100755 index 0000000..35004c9 --- /dev/null +++ b/common/models/LoginForm.php @@ -0,0 +1,92 @@ +hasErrors()) { + $user = $this->getUser(); + if (!$user || !$user->validatePassword($this->password)) { + $this->addError($attribute, 'Incorrect username or password.'); + } + } + } + + /** + * Logs in a user using the provided username and password. + * + * @return boolean whether the user is logged in successfully + */ + public function login() + { + if ($this->validate()) { + + return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0); + } else { + return false; + } + } + + /** + * Finds user by [[username]] + * + * @return User|null + */ + protected function getUser() + { + if ($this->_user === null) { + $this->_user = Customer::findByEmail($this->email); + } + + return $this->_user; + } + + + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'rememberMe' => Yii::t('app', 'rememberMe'), + ]; + } +} diff --git a/common/models/Orders.php b/common/models/Orders.php new file mode 100755 index 0000000..5685b4c --- /dev/null +++ b/common/models/Orders.php @@ -0,0 +1,212 @@ + [ 'phone' ], + ]); + return $scenarios; + } + + public function rules() + { + return [ + [ + [ + 'name', + 'phone', + ], + 'required', + ], + [ + [ 'comment' ], + 'safe', + ], + [ + [ 'email' ], + 'email', + ], + [ + [ 'phone' ], + 'match', + 'pattern' => '/^\+38\(\d{3}\)\d{3}-\d{2}-\d{2}$/', + 'on' => self::SCENARIO_QUICK, + ], + ]; + } + + public function attributeLabels() + { + return [ + 'name' => 'Ф.И.О', + 'phone' => 'Контактный телефон', + 'email' => 'email', + 'comment' => 'Комментарии', + ]; + } + + public function beforeSave($insert) + { + $this->user_id = Yii::$app->user->id; + $this->date_time = new \yii\db\Expression('NOW()'); + return parent::beforeSave($insert); + } + + public function beforeDelete() + { + return parent::beforeDelete(); + } + + public function addBasket($mod_id, $count) + { + $session = new Session; + $session->open(); + $data = $session[ 'basket' ]; + $i = 0; + if(isset( $session[ 'basket' ] )) { + foreach($session[ 'basket' ] as $key => $basket) { + if($mod_id == $basket[ 'id' ]) { + $data[ $key ][ 'count' ] += $count; + $session[ 'basket' ] = $data; + $i++; + } + } + } + if($i == 0) { + $data[] = [ + 'id' => $mod_id, + 'count' => $count, + ]; + $session[ 'basket' ] = $data; + } + } + + public function rowBasket() + { + $session = new Session; + $session->open(); + $cost = 0; + $count = 0; + if(isset( $session[ 'basket' ] ) && count($session[ 'basket' ])) { + foreach($session[ 'basket' ] as $product) { + $count += $product[ 'count' ]; + } + } + + return (object) [ + 'cost' => $cost, + 'count' => $count, + ]; + } + + public function deleteBasketMod($id) + { + $session = new Session; + $session->open(); + $basket = $session[ 'basket' ]; + foreach($basket as $key => $product) { + if($id == $product[ 'id' ]) { + unset( $basket[ $key ] ); + } + } + $session[ 'basket' ] = $basket; + } + + public function updateBasket($row) + { + $session = new Session; + $session->open(); + //$data = array(); + if($row[ 'count' ] > 0) { + $this->data[] = [ + 'id' => $row[ 'id' ], + 'count' => $row[ 'count' ], + ]; + } + $session[ 'basket' ] = $this->data; + } + + public function getBasketMods() + { + $session = new Session; + $session->open(); + $products = []; + if(empty( $session[ 'basket' ] )) { + return []; + } + foreach($session[ 'basket' ] as $product) { + $row = ProductVariant::find() + ->select([ + 'product_variant.*', + 'product.name as product_name', + 'product.alias', + ]) + ->where([ 'product_variant.product_variant_id' => $product[ 'id' ] ]) + ->leftJoin('product', 'product.product_id = product_variant.product_id') + ->one(); + $row->count = $product[ 'count' ]; + $row->sum_cost = $product[ 'count' ] * $row->price; + $products[] = $row; + } + + return $products; + } + + public function getSumCost() + { + $session = new Session; + $session->open(); + $cost = 0; + if(empty( $session[ 'basket' ] )) { + return false; + } + foreach($session[ 'basket' ] as $product) { + $cost += ( $this->getModCost($product[ 'id' ]) * $product[ 'count' ] ); + } + + return $cost; + } + + private function getModCost($mod_id) + { + $mod = ProductVariant::find() + ->where([ 'product_variant_id' => $mod_id ]) + ->one(); + + return $mod->price; + } + + public function clearBasket() + { + $session = new Session; + $session->open(); + $session[ 'basket' ] = NULL; + } + + public function getUser() + { + return $this->hasOne(User::className(), [ 'id' => 'user_id' ]); + } + + public function getProducts() + { + return $this->hasMany(OrdersProducts::className(), [ 'order_id' => 'id' ]); + } + } \ No newline at end of file diff --git a/common/models/OrdersProducts.php b/common/models/OrdersProducts.php new file mode 100755 index 0000000..dbc7b3e --- /dev/null +++ b/common/models/OrdersProducts.php @@ -0,0 +1,40 @@ +'Продукт', + 'name'=>'Вид', + 'art'=>'Артикул', + 'cost'=>'Цена за один', + 'count'=>'Кол.', + 'sum_cost'=>'Сумма', + ]; + } + + public function getProductVariant() + { + return $this->hasOne(ProductVariant::className(), ['product_variant_id' => 'mod_id']); + } +} \ No newline at end of file diff --git a/common/models/OrdersSearch.php b/common/models/OrdersSearch.php new file mode 100755 index 0000000..b5ce4dd --- /dev/null +++ b/common/models/OrdersSearch.php @@ -0,0 +1,78 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'order_id' => $this->order_id, + 'customer_id' => $this->customer_id, + 'delivery' => $this->delivery, + 'payment' => $this->payment, + 'status' => $this->status, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + ]); + + $query->andFilterWhere(['like', 'name', $this->name]) + ->andFilterWhere(['like', 'email', $this->email]) + ->andFilterWhere(['like', 'phone', $this->phone]) + ->andFilterWhere(['like', 'code', $this->code]); + + return $dataProvider; + } +} diff --git a/common/models/Page.php b/common/models/Page.php new file mode 100755 index 0000000..bac6703 --- /dev/null +++ b/common/models/Page.php @@ -0,0 +1,76 @@ + [ + 'class' => 'common\behaviors\Slug', + 'in_attribute' => 'title', + 'out_attribute' => 'translit', + 'translit' => true + ] + ]; + } + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['body', 'seo_text'], 'string'], + [['translit', 'title', 'meta_title', 'meta_keywords', 'meta_description', 'h1'], 'string', 'max' => 255], + ]; + } + public function getPageTranslit($page){ + return self::find() + ->where(['translit' => $page]) + ->one(); + + } + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'translit' => 'Translit', + 'title' => 'Title', + 'body' => 'Body', + 'meta_title' => 'Meta Title', + 'meta_keywords' => 'Meta Keywords', + 'meta_description' => 'Meta Description', + 'seo_text' => 'Seo Text', + 'h1' => 'H1', + ]; + } +} diff --git a/common/models/PageSearch.php b/common/models/PageSearch.php new file mode 100755 index 0000000..a914813 --- /dev/null +++ b/common/models/PageSearch.php @@ -0,0 +1,76 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'id' => $this->id, + ]); + + $query->andFilterWhere(['like', 'translit', $this->translit]) + ->andFilterWhere(['like', 'title', $this->title]) + ->andFilterWhere(['like', 'body', $this->body]) + ->andFilterWhere(['like', 'meta_title', $this->meta_title]) + ->andFilterWhere(['like', 'meta_keywords', $this->meta_keywords]) + ->andFilterWhere(['like', 'meta_description', $this->meta_description]) + ->andFilterWhere(['like', 'seo_text', $this->seo_text]) + ->andFilterWhere(['like', 'h1', $this->h1]); + + return $dataProvider; + } +} diff --git a/common/models/ProductToRating.php b/common/models/ProductToRating.php new file mode 100755 index 0000000..ad5755e --- /dev/null +++ b/common/models/ProductToRating.php @@ -0,0 +1,59 @@ + 0], + [['product_id'], 'exist', 'skipOnError' => true, 'targetClass' => Product::className(), 'targetAttribute' => ['product_id' => 'product_id']], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'product_to_rating_id' => 'Product To Rating ID', + 'product_id' => 'Product ID', + 'value' => 'Value', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getProduct() + { + return $this->hasOne(Product::className(), ['product_id' => 'product_id']); + } +} diff --git a/common/models/Seo.php b/common/models/Seo.php new file mode 100755 index 0000000..86df70e --- /dev/null +++ b/common/models/Seo.php @@ -0,0 +1,55 @@ + 255], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'seo_id' => Yii::t('app', 'seo_id'), + 'url' => Yii::t('app', 'url'), + 'title' => Yii::t('app', 'title'), + 'meta' => Yii::t('app', 'meta_title'), + 'description' => Yii::t('app', 'description'), + 'h1' => Yii::t('app', 'h1'), + 'seo_text' => Yii::t('app', 'seo_text'), + ]; + } +} diff --git a/common/models/SeoCategory.php b/common/models/SeoCategory.php new file mode 100755 index 0000000..4cd7459 --- /dev/null +++ b/common/models/SeoCategory.php @@ -0,0 +1,59 @@ + 255], + [['controller'], 'string', 'max' => 100], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'seo_category_id' => Yii::t('app', 'seo_category_id'), + 'name' => Yii::t('app', 'name'), + 'controller' => Yii::t('app', 'controller'), + 'status' => Yii::t('app', 'status'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getSeoDynamics() + { + return $this->hasMany(SeoDynamic::className(), ['seo_category_id' => 'seo_category_id']); + } +} diff --git a/common/models/SeoCategorySearch.php b/common/models/SeoCategorySearch.php new file mode 100755 index 0000000..120800b --- /dev/null +++ b/common/models/SeoCategorySearch.php @@ -0,0 +1,71 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'seo_category_id' => $this->seo_category_id, + 'status' => $this->status, + ]); + + $query->andFilterWhere(['like', 'name', $this->name]) + ->andFilterWhere(['like', 'controller', $this->controller]); + + return $dataProvider; + } +} diff --git a/common/models/SeoDynamic.php b/common/models/SeoDynamic.php new file mode 100755 index 0000000..2d58dad --- /dev/null +++ b/common/models/SeoDynamic.php @@ -0,0 +1,78 @@ + 200], + [['fields', 'title', 'meta', 'h1', 'description', 'param', 'key'], 'string', 'max' => 255], + [['seo_category_id'], 'exist', 'skipOnError' => true, 'targetClass' => SeoCategory::className(), 'targetAttribute' => ['seo_category_id' => 'seo_category_id']], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'seo_dynamic_id' => Yii::t('app', 'seo_dynamic_id'), + 'seo_category_id' => Yii::t('app', 'seo_category_id'), + 'name' => Yii::t('app', 'name'), + 'action' => Yii::t('app', 'action'), + 'fields' => Yii::t('app', 'fields'), + 'title' => Yii::t('app', 'title'), + 'meta' => Yii::t('app', 'meta'), + 'h1' => Yii::t('app', 'h1'), + 'description' => Yii::t('app', 'description'), + 'seo_text' => Yii::t('app', 'seo_text'), + 'status' => Yii::t('app', 'status'), + 'param' => Yii::t('app', 'param'), + 'key' => Yii::t('app', 'key'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getSeoCategory() + { + return $this->hasOne(SeoCategory::className(), ['seo_category_id' => 'seo_category_id']); + } +} diff --git a/common/models/SeoDynamicSearch.php b/common/models/SeoDynamicSearch.php new file mode 100755 index 0000000..6c57b34 --- /dev/null +++ b/common/models/SeoDynamicSearch.php @@ -0,0 +1,78 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'seo_dynamic_id' => $this->seo_dynamic_id, + 'seo_category_id' => $seo_category_id, + 'status' => $this->status, + ]); + + $query->andFilterWhere(['like', 'name', $this->name]) + ->andFilterWhere(['like', 'action', $this->action]) + ->andFilterWhere(['like', 'fields', $this->fields]) + ->andFilterWhere(['like', 'title', $this->title]) + ->andFilterWhere(['like', 'meta', $this->title]) + ->andFilterWhere(['like', 'h1', $this->h1]) + ->andFilterWhere(['like', 'description', $this->description]) + ->andFilterWhere(['like', 'seo_text', $this->seo_text]); + + return $dataProvider; + } +} diff --git a/common/models/SeoSearch.php b/common/models/SeoSearch.php new file mode 100755 index 0000000..e8882bc --- /dev/null +++ b/common/models/SeoSearch.php @@ -0,0 +1,74 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'seo_id' => $this->seo_id, + ]); + + $query->andFilterWhere(['like', 'url', $this->url]) + ->andFilterWhere(['like', 'title', $this->title]) + ->andFilterWhere(['like', 'meta', $this->meta]) + ->andFilterWhere(['like', 'description', $this->description]) + ->andFilterWhere(['like', 'h1', $this->h1]) + ->andFilterWhere(['like', 'seo_text', $this->seo_text]); + + return $dataProvider; + } +} diff --git a/common/models/Service.php b/common/models/Service.php new file mode 100755 index 0000000..05ed8f8 --- /dev/null +++ b/common/models/Service.php @@ -0,0 +1,81 @@ + 255], + ]; + } + /** + * @inheritdoc + */ + public function behaviors() + { + return [ + TimestampBehavior::className(), + 'slug' => [ + 'class' => 'common\behaviors\Slug', + 'in_attribute' => 'name', + 'out_attribute' => 'alias', + 'translit' => true + ], + [ + 'class' => 'common\behaviors\ShowImage', + ], + ]; + } + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'service_id' => Yii::t('app', 'service_id'), + 'name' => Yii::t('app', 'name'), + 'alias' => Yii::t('app', 'alias'), + 'body' => Yii::t('app', 'body'), + 'image' => Yii::t('app', 'image'), + 'meta_title' => Yii::t('app', 'meta_title'), + 'description' => Yii::t('app', 'description'), + 'h1' => Yii::t('app', 'h1'), + 'seo_text' => Yii::t('app', 'seo_text'), + 'created_at' => Yii::t('app', 'created_at'), + 'updated_at' => Yii::t('app', 'updated_at'), + ]; + } +} diff --git a/common/models/ServiceSearch.php b/common/models/ServiceSearch.php new file mode 100755 index 0000000..8b1edac --- /dev/null +++ b/common/models/ServiceSearch.php @@ -0,0 +1,78 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'service_id' => $this->service_id, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + ]); + + $query->andFilterWhere(['like', 'name', $this->name]) + ->andFilterWhere(['like', 'alias', $this->alias]) + ->andFilterWhere(['like', 'body', $this->body]) + ->andFilterWhere(['like', 'image', $this->image]) + ->andFilterWhere(['like', 'meta_title', $this->meta_title]) + ->andFilterWhere(['like', 'description', $this->description]) + ->andFilterWhere(['like', 'h1', $this->h1]) + ->andFilterWhere(['like', 'seo_text', $this->seo_text]); + + return $dataProvider; + } +} diff --git a/common/models/Share.php b/common/models/Share.php new file mode 100755 index 0000000..f25dcaf --- /dev/null +++ b/common/models/Share.php @@ -0,0 +1,45 @@ + 'Название', + 'date_time'=>'Дата', + ]; + } + + public function beforeSave($insert) { + $this->user_id = Yii::$app->user->id; + $this->date_time = date('Y-m-d H:i:s'); + $this->date = date('Y-m-d'); + return parent::beforeSave($insert); + } + + public function beforeDelete() { + return parent::beforeDelete(); + } + + public function getProduct() + { + return $this->hasOne(Product::className(), ['product_id' => 'product_id']); + } + + public function getShareList() + { + return $this->hasMany(self::className(), ['date' => 'date'])->where(['user_id'=>Yii::$app->user->id])->orderBy('id DESC'); + } + +} diff --git a/common/models/Slider.php b/common/models/Slider.php new file mode 100755 index 0000000..e1d5520 --- /dev/null +++ b/common/models/Slider.php @@ -0,0 +1,88 @@ + 200], + [['width', 'height'], 'required'], + ['title', 'unique', 'targetClass' => '\common\models\Slider', 'message' => Yii::t('app','message',[ + 'field' => 'Title' + ])], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'slider_id' => Yii::t('app', 'slider_id'), + 'speed' => Yii::t('app', 'speed'), + 'duration' => Yii::t('app', 'duration'), + 'title' => Yii::t('app', 'title'), + 'status' => Yii::t('app', 'status'), + 'width' => Yii::t('app', 'width'), + 'height' => Yii::t('app', 'height'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getSliderImage() + { + return $this->hasMany(SliderImage::className(), ['slider_id' => 'slider_id'])->where([SliderImage::tableName().'.status'=>1]); + } + + + /** + * fetch stored image file name with complete path + * @return string + */ + public function getImageFile() + { + return isset($this->image) ? '/storage/slider/' . $this->image : null; + } + + /** + * fetch stored image url + * @return string + */ + public function getImageUrl() + { + // return a default image placeholder if your source image is not found + return isset($this->image) ? '/storage/slider/'. $this->image : '/storage/no_photo.png'; + } +} diff --git a/common/models/SliderImage.php b/common/models/SliderImage.php new file mode 100755 index 0000000..a4e91e5 --- /dev/null +++ b/common/models/SliderImage.php @@ -0,0 +1,111 @@ + SaveImgBehavior::className(), + 'fields' => [ + ['name'=>'image','directory' => 'slider' ] + ] + ] + ]; + } + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['slider_id', 'status', 'sort'], 'integer'], + [['image', 'alt', 'title', 'url','end_at'], 'string', 'max' => 255], + [['slider_id'], 'exist', 'skipOnError' => true, 'targetClass' => Slider::className(), 'targetAttribute' => ['slider_id' => 'slider_id']], + ]; + } + + + public function beforeSave($insert) + { + if (parent::beforeSave($insert)) { + + $this->end_at = !empty($this->end_at) ? strtotime($this->end_at) : ''; + return true; + } else { + return false; + } + } + + public function afterFind(){ + $this->end_at = !empty($this->end_at) ? date("Y-m-d", $this->end_at) : ''; + } + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'slider_image_id' => Yii::t('app', 'slider_image_id'), + 'slider_id' => Yii::t('app', 'slider_id'), + 'image' => Yii::t('app', 'image'), + 'alt' => Yii::t('app', 'alt'), + 'title' => Yii::t('app', 'title'), + 'url' => Yii::t('app', 'url'), + 'status' => Yii::t('app', 'status'), + 'sort' => Yii::t('app', 'sort'), + ]; + } + public function isActive(){ + if($this->status){ + + if(!empty($this->end_at) && (strtotime($this->end_at) <= strtotime(date("Y-m-d")))){ + return false; + } + return true; + } + return false; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getSlider() + { + return $this->hasOne(Slider::className(), ['slider_id' => 'slider_id']); + } + + +} diff --git a/common/models/SliderImageSearch.php b/common/models/SliderImageSearch.php new file mode 100755 index 0000000..56368eb --- /dev/null +++ b/common/models/SliderImageSearch.php @@ -0,0 +1,77 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'slider_image_id' => $this->slider_image_id, + 'slider_id' => $slider_id, + 'status' => $this->status, + 'sort' => $this->sort, + ]); + + $query->andFilterWhere(['like', 'image', $this->image]) + ->andFilterWhere(['like', 'alt', $this->alt]) + ->andFilterWhere(['like', 'title', $this->title]) + ->andFilterWhere(['like', 'url', $this->url]); + + return $dataProvider; + } +} diff --git a/common/models/SliderSearch.php b/common/models/SliderSearch.php new file mode 100755 index 0000000..f4fc994 --- /dev/null +++ b/common/models/SliderSearch.php @@ -0,0 +1,74 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'slider_id' => $this->slider_id, + 'speed' => $this->speed, + 'duration' => $this->duration, + 'status' => $this->status, + + ]); + + $query->andFilterWhere(['like', 'title', $this->title]); + + return $dataProvider; + } +} diff --git a/common/models/Subscribe.php b/common/models/Subscribe.php new file mode 100755 index 0000000..e3baba3 --- /dev/null +++ b/common/models/Subscribe.php @@ -0,0 +1,28 @@ +where('email = :email', [':email' => $this->email]) + ->exists()) + $this->addError('email','Такой email уже есть.'); + } + +} \ No newline at end of file diff --git a/common/models/SubscribeSearch.php b/common/models/SubscribeSearch.php new file mode 100755 index 0000000..4aeca70 --- /dev/null +++ b/common/models/SubscribeSearch.php @@ -0,0 +1,71 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'id' => $this->id, + 'sale' => $this->sale, + 'sand' => $this->sand, + ]); + + $query->andFilterWhere(['like', 'email', $this->email]); + + return $dataProvider; + } +} diff --git a/common/models/TemplateLocation.php b/common/models/TemplateLocation.php new file mode 100755 index 0000000..22fa840 --- /dev/null +++ b/common/models/TemplateLocation.php @@ -0,0 +1,76 @@ + 255], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'template_location_id' => Yii::t('app', 'Template Location ID'), + 'template_location_name' => Yii::t('app', 'Template Location Name'), + 'template_location_title' => Yii::t('app', 'Template Location Title'), + 'width' => Yii::t('app', 'Width'), + 'height' => Yii::t('app', 'Height'), + 'sort' => Yii::t('app', 'Sort'), + 'is_slider' => Yii::t('app', 'Is Slider'), + 'is_banner' => Yii::t('app', 'Is Banner'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getBanners() + { + return $this->hasMany(Banner::className(), ['template_location_id' => 'template_location_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getSliders() + { + return $this->hasMany(Slider::className(), ['template_location_id' => 'template_location_id']); + } +} diff --git a/common/models/TemplateLocationSearch.php b/common/models/TemplateLocationSearch.php new file mode 100755 index 0000000..dbbcd74 --- /dev/null +++ b/common/models/TemplateLocationSearch.php @@ -0,0 +1,75 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'template_location_id' => $this->template_location_id, + 'width' => $this->width, + 'height' => $this->height, + 'sort' => $this->sort, + 'is_slider' => $this->is_slider, + 'is_banner' => $this->is_banner, + ]); + + $query->andFilterWhere(['like', 'template_location_name', $this->template_location_name]) + ->andFilterWhere(['like', 'template_location_title', $this->template_location_title]); + + return $dataProvider; + } +} diff --git a/common/models/User.php b/common/models/User.php new file mode 100755 index 0000000..71d7a0c --- /dev/null +++ b/common/models/User.php @@ -0,0 +1,190 @@ + self::STATUS_ACTIVE], + ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]], + ]; + } + + /** + * @inheritdoc + */ + public static function findIdentity($id) + { + return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]); + } + + /** + * @inheritdoc + */ + public static function findIdentityByAccessToken($token, $type = null) + { + throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.'); + } + + /** + * Finds user by username + * + * @param string $username + * @return static|null + */ + public static function findByUsername($username) + { + return static::findOne(['username' => $username, 'status' => self::STATUS_ACTIVE]); + } + + /** + * Finds user by password reset token + * + * @param string $token password reset token + * @return static|null + */ + public static function findByPasswordResetToken($token) + { + if (!static::isPasswordResetTokenValid($token)) { + return null; + } + + return static::findOne([ + 'password_reset_token' => $token, + 'status' => self::STATUS_ACTIVE, + ]); + } + + /** + * Finds out if password reset token is valid + * + * @param string $token password reset token + * @return boolean + */ + public static function isPasswordResetTokenValid($token) + { + if (empty($token)) { + return false; + } + + $timestamp = (int) substr($token, strrpos($token, '_') + 1); + $expire = Yii::$app->params['user.passwordResetTokenExpire']; + return $timestamp + $expire >= time(); + } + + /** + * @inheritdoc + */ + public function getId() + { + return $this->getPrimaryKey(); + } + + /** + * @inheritdoc + */ + public function getAuthKey() + { + return $this->auth_key; + } + + /** + * @inheritdoc + */ + public function validateAuthKey($authKey) + { + return $this->getAuthKey() === $authKey; + } + + /** + * Validates password + * + * @param string $password password to validate + * @return boolean if password provided is valid for current user + */ + public function validatePassword($password) + { + return Yii::$app->security->validatePassword($password, $this->password_hash); + } + + /** + * Generates password hash from password and sets it to the model + * + * @param string $password + */ + public function setPassword($password) + { + $this->password_hash = Yii::$app->security->generatePasswordHash($password); + } + + /** + * Generates "remember me" authentication key + */ + public function generateAuthKey() + { + $this->auth_key = Yii::$app->security->generateRandomString(); + } + + /** + * Generates new password reset token + */ + public function generatePasswordResetToken() + { + $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time(); + } + + /** + * Removes password reset token + */ + public function removePasswordResetToken() + { + $this->password_reset_token = null; + } + + +} diff --git a/common/modules/artboxfile/Module.php b/common/modules/artboxfile/Module.php new file mode 100755 index 0000000..72360d2 --- /dev/null +++ b/common/modules/artboxfile/Module.php @@ -0,0 +1,24 @@ +request->post(); + + $multiple = !empty($request['multiple']); + $fileField = empty($request['fileField']) ? 'file' : $request['fileField']; + $formField = empty($request['formField']) ? 'fileUpload' : $request['formField']; + + + if($_FILES[$formField]) + { + if (($_FILES[$formField] == "none") OR (empty($_FILES[$formField]['name'])) ) + { + $error = "Вы не выбрали файл"; + } + else if ($_FILES[$formField]["size"] == 0 OR $_FILES[$formField]["size"] > 2050000) + { + $error = "Размер файла не соответствует нормам"; + } + /*else if (($_FILES['upload']["type"] != "image/jpeg") AND ($_FILES['upload']["type"] != "image/jpeg") AND ($_FILES['upload']["type"] != "image/png") AND ($_FILES['upload']['type'] != 'image/gif')) + { + $message = "Допускается загрузка только картинок JPG, GIF и PNG."; + }*/ + else if (!is_uploaded_file($_FILES[$formField]["tmp_name"])) + { + $error = "Что-то пошло не так. Попытайтесь загрузить файл ещё раз."; + } + else{ + $ext = $this->getex($_FILES[$formField]['name']); + $name = $_FILES[$formField]['name'] .'.'. $ext; + $tmpName = uniqid('tmpfile_') .'.'. $ext; + + $path = Yii::getAlias($this->tmpDir); + if(!is_dir($path)) { + mkdir($path, 0755, true); + } + + if (!move_uploaded_file($_FILES[$formField]['tmp_name'], $path .'/'. $tmpName)) { + $error = "File not uploaded"; + } else { + $full_path = $path .'/'. $tmpName; + $message = "Файл " . $_FILES[$formField]['name'] . " in $full_path загружен"; + } + } + } + if (!empty($error)) { + print json_encode(['error' => $error]); + } else { + $sendingData = [ + 'append' => $multiple, +// 'initialPreview' => Html::img() +// 'initialPreviewConfig' => , +// 'initialPreviewThumbTags' => , + + ]; + print json_encode(['message' => $message, 'tmpfile' => $full_path, 'filename' => $name]); + } + exit; + } + + protected function getex($filename) { + return end(explode(".", $filename)); + } +} \ No newline at end of file diff --git a/common/modules/artboxfile/models/File.php b/common/modules/artboxfile/models/File.php new file mode 100755 index 0000000..f5c4188 --- /dev/null +++ b/common/modules/artboxfile/models/File.php @@ -0,0 +1,34 @@ + 255], + [[$this->fileUploadName], 'safe'], + [[$this->fileUploadName], 'file', 'extensions' => 'jpg, gif, png'], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'file' => Yii::t('artbox', 'File name'), + 'fileUpload' => Yii::t('artbox', 'File'), + ]; + } +} \ No newline at end of file diff --git a/common/modules/blog/Module.php b/common/modules/blog/Module.php new file mode 100755 index 0000000..4b46c45 --- /dev/null +++ b/common/modules/blog/Module.php @@ -0,0 +1,15 @@ + [[0 => property(свойство обьекта), ... дополнительные + * настройки]], ...[]] + * + */ + public $attributes; + + /** + * События + * + * События на которые должно срабатывать поведение. Задается ассоциативный массив, в котором ключ - событие + * связанного обьекта, а значение - метод, который вызывается при этом событии + * + * @return array [key(event) => val(method)] + * + */ + public function events() + { + return [ + ActiveRecord::EVENT_BEFORE_INSERT => 'autocomplete', + ActiveRecord::EVENT_BEFORE_UPDATE => 'autocomplete', + ]; + } + + /** + * События + * + * События на которые должно срабатывать поведение. Задается ассоциативный массив, в котором ключ - событие + * связанного обьекта, а значение - метод, который вызывается при этом событии + * Доступные автозаполнения: + * ['translit' => ['prop1', ... 'prop2']], + * где prop - свойство подлежащее транслитерации + * ['repeat' => [[string 'prop1', string 'target1', boolean 'skipFilled', int 'count', boolean 'truncate', string 'suffix'], ...[]], + * где prop - свойство для преобразования, + * target - свойство с которого взять данные, + * count - число для преобразования, + * skipFilled - пропустить непустые, + * truncate - true - обрезать по словам, false - по символам, + * suffix - суффикс, который добавить после обрезки + * + * @param mixed $event Yii обьект свойста https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/concept-events.md + * + */ + public function autocomplete($event) + { + if(!empty($this->attributes['translit'])) { + foreach($this->attributes['translit'] as $translit) { + if($this->owner->hasAttribute($translit)) { + $this->owner->$translit = Tools::translit($this->owner->$translit); + } + } + } + if(!empty($this->attributes['repeat'])) { + foreach($this->attributes['repeat'] as $repeat) { + if(is_array($repeat) && $this->owner->hasAttribute($repeat[0]) && $this->owner->hasAttribute($repeat[1]) && is_int($repeat[3]) && (empty($this->owner->$repeat[0]) || $repeat[2])) { + $suffix = $repeat[5]?:''; + $truncate = $repeat[4]?'truncateWords':'truncate'; + $this->owner->$repeat[0] = StringHelper::$truncate($this->owner->$repeat[1], $repeat[3], $suffix); + } + } + } + } +} \ No newline at end of file diff --git a/common/modules/blog/config.php b/common/modules/blog/config.php new file mode 100755 index 0000000..8a7e162 --- /dev/null +++ b/common/modules/blog/config.php @@ -0,0 +1,9 @@ + [ + + ], + 'params' => [ + 'test' => 'Hello', + ], +]; diff --git a/common/modules/blog/controllers/AjaxController.php b/common/modules/blog/controllers/AjaxController.php new file mode 100755 index 0000000..6e6ebcd --- /dev/null +++ b/common/modules/blog/controllers/AjaxController.php @@ -0,0 +1,133 @@ +request->getIsAjax()) { + //throw new ForbiddenHttpException('Permission denied'); + } + + if(!parent::beforeAction($action)) { + return false; + } + + return true; + } + + public function actionCategoryForm($language_id, $widget_id) + { + $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['status' => 1, 'language_id' => $language_id])->one(); + if(!$model) { + throw new NotFoundHttpException('Language not found'); + } + $category_lang = new ArticleCategoryLang(); + return $this->renderAjax('_category_form', ['model' => $model, 'category_lang' => $category_lang, 'widget_id' => $widget_id]); + } + + public function actionArticleForm($language_id, $widget_id) + { + $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['status' => 1, 'language_id' => $language_id])->one(); + if(!$model) { + throw new NotFoundHttpException('Language not found'); + } + $article_lang = new ArticleLang(); + return $this->renderAjax('_article_form', ['model' => $model, 'article_lang' => $article_lang, 'widget_id' => $widget_id]); + } + + public function actionArticleMediaForm($language_id, $widget_id, $type) + { + $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['status' => 1, 'language_id' => $language_id])->one(); + if(!$model) { + throw new NotFoundHttpException('Language not found'); + } + if(!in_array($type, ['full', 'preview'])) { + throw new InvalidParamException('Type must only be full/preview'); + } + $article_lang = new ArticleMedia(); + return $this->renderAjax('_article_media_form', ['model' => $model, 'article_lang' => $article_lang, 'widget_id' => $widget_id, 'type' => $type]); + } + + public function actionArticleCategoryMediaForm($language_id, $widget_id, $type) + { + $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['status' => 1, 'language_id' => $language_id])->one(); + if(!$model) { + throw new NotFoundHttpException('Language not found'); + } + if(!in_array($type, ['full', 'preview'])) { + throw new InvalidParamException('Type must only be full/preview'); + } + $article_lang = new ArticleCategoryMedia(); + return $this->renderAjax('_article_media_form', ['model' => $model, 'article_lang' => $article_lang, 'widget_id' => $widget_id, 'type' => $type]); + } + + public function actionRemoveImage() + { + $post = \Yii::$app->request->post(); + if(!empty($post['article_media_id'])) { + $article_media = ArticleMedia::findOne($post['article_media_id']); + if($post['remove_media']) { + $media = $article_media->media->delete(); + } + if(!empty($article_media)) { + $article_media->delete(); + } + return true; + } else { + return false; + } + } + + public function actionRemoveCategoryImage() + { + $post = \Yii::$app->request->post(); + if(!empty($post['category_media_id'])) { + $category_media = ArticleCategoryMedia::findOne($post['category_media_id']); + if($post['remove_media']) { + $media = $category_media->media->delete(); + } + if(!empty($category_media)) { + $category_media->delete(); + } + return true; + } else { + return false; + } + } + + public function actionRemoveImageCategory() + { + $post = \Yii::$app->request->post(); + if(!empty($post['category_media_id'])) { + $category_media = ArticleCategoryMedia::findOne($post['category_media_id']); + if($post['remove_media']) { + $media = $category_media->media->delete(); + } + if(!empty($category_media)) { + $category_media->delete(); + } + return true; + } else { + return false; + } + } + + public function actionMultilangForm($model, $ajaxView, $widget_id, $language_id = NULL) + { + $model = new $model(['language_id' => $language_id]); + return $this->renderAjax($ajaxView, ['model' => $model, 'widget_id' => $widget_id]); + } + +} diff --git a/common/modules/blog/controllers/ArticleController.php b/common/modules/blog/controllers/ArticleController.php new file mode 100755 index 0000000..c5f18ab --- /dev/null +++ b/common/modules/blog/controllers/ArticleController.php @@ -0,0 +1,228 @@ + Article::find(), + 'pagination' => [ + 'pageSize' => 1, + ], + ]); + return $this->render('index', ['dataProvider' => $dataProvider]); + } + + public function actionCreate() + { + $article_langs = array(); + $article = new Article(); + $default_lang = Language::getDefaultLang(); + $images = array(); + $images[$default_lang->language_id]['full'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_FULL]); + $images[$default_lang->language_id]['preview'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_PREVIEW]); + $images[0]['additional'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]); + $article->loadDefaultValues(); + $langs = Language::getActiveLanguages(); + $isValid = false; + if(!empty(\Yii::$app->request->post())) { + $isValid = true; + $article->load(\Yii::$app->request->post()); + $article->user_id = \Yii::$app->user->getId(); + $isValid = $article->validate(); + foreach(\Yii::$app->request->post()['ArticleMedia'] as $lang => $value) { + foreach($value as $type => $fields) { + $images[$lang][$type] = new ArticleMedia(['scenario' => $type]); + $images[$lang][$type]->type = $type; + $images[$lang][$type]->language_id = $lang; + $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile"); + $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid; + } + } + $images[0]['additional']->language_id = 0; + $images[0]['additional']->type = 'additional'; + $images[0]['additional']->imageFile = UploadedFile::getInstances($images[0]['additional'], "[0][additional]imageFile"); + if(empty(\Yii::$app->request->post()['ArticleLang'])) { + $article_langs[$default_lang->language_id] = new ArticleLang(); + $isValid = ArticleLang::validateMultiple($article_langs) && $isValid; + } else { + foreach(\Yii::$app->request->post()['ArticleLang'] as $index => $article_lang) { + $article_langs[$index] = new ArticleLang(); + } + ArticleLang::loadMultiple($article_langs, \Yii::$app->request->post()); + $isValid = ArticleLang::validateMultiple($article_langs) && $isValid; + } + } else { + $article_langs[$default_lang->language_id] = new ArticleLang(); + } + if($isValid) { + $article->save(false); + $article_categories = \Yii::$app->request->post('Article')['articleCategoriesArray']; + if(!empty($article_categories)) { + foreach($article_categories as $article_category) { + $articletocategory[$article_category] = new ArticleToCategory(); + $articletocategory[$article_category]->article_category_id = $article_category; + $articletocategory[$article_category]->link('article', $article); + } + } + $first = 1; + foreach($images as $lang => $value) { + foreach($value as $type => $fields) { + $images[$lang][$type]->upload($article->article_id); + if($first && $type != 'additional') { + $media_clone = clone $images[$lang][$type]; + $media_clone->setIsNewRecord(true); + unset($media_clone->article_media_id); + $media_clone->language_id = 0; + $media_clone->upload($article->article_id); + unset($media_clone); + $first = 0; + } + } + } + $first = 1; + foreach($article_langs as $article_lang) { + if($first) { + $article_lang_clone = clone $article_lang; + $article_lang_clone->language_id = 0; + $article_lang_clone->link('article', $article); + unset($article_lang_clone); + } + $article_lang->link('article', $article); + $first = 0; + } + echo "ok"; + //$this->redirect('index'); + } else { + return $this->render('create', [ + 'article_langs' => $article_langs, + 'article' => $article, + 'langs' => $langs, + 'images' => $images + ]); + } + } + + public function actionUpdate($id) + { + $article = Article::findOne($id); + $imagestack = $article->getArticleMedia()->all(); + $images = []; + $images[0]['additional'][0] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]); + $images[0]['additional'][0]->type = 'additional'; + $images[0]['additional'][0]->language_id = 0; + foreach($imagestack as $image) { + if(in_array($image->type, ['full', 'preview'])) { + $images[$image->language_id][$image->type] = $image; + $images[$image->language_id][$image->type]->scenario = $image->type; + } else { + $images[$image->language_id][$image->type][$image->article_media_id] = $image; + $images[$image->language_id][$image->type][$image->article_media_id]->scenario = $image->type; + } + } + foreach($images as $lang => $value) { + $images[$lang]['additional'][0] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]); + } + $article_langs = $article->getArticleLangs()->where(['>=', 'language_id', '1'])->indexBy('language_id')->all(); + $langs = Language::getActiveLanguages(); + $default_lang = Language::getDefaultLang(); + $isValid = false; + if(!empty(\Yii::$app->request->post())) { + $isValid = true; + $article->load(\Yii::$app->request->post()); + ArticleToCategory::deleteAll(['article_id' => $article->article_id]); + $article_categories = \Yii::$app->request->post('Article')['articleCategoriesArray']; + if(!empty($article_categories)) { + foreach($article_categories as $article_category) { + $articletocategory[$article_category] = new ArticleToCategory(); + $articletocategory[$article_category]->article_category_id = $article_category; + $articletocategory[$article_category]->link('article', $article); + } + } + $isValid = $article->validate(); + $images[0]['additional'][0]->type = 'additional'; + $images[0]['additional'][0]->language_id = 0; + $images[0]['additional'][0]->imageFile = UploadedFile::getInstances($images[0]['additional'][0], "[0][additional]imageFile"); + $isValid = $images[0]['additional'][0]->validate(['imageFile']) && $isValid; + foreach(\Yii::$app->request->post()['ArticleMedia'] as $lang => $value) { + foreach($value as $type => $fields) { + if(!in_array($type, ['full', 'preview'])) continue; + $images[$lang][$type] = new ArticleMedia(['scenario' => $type]); + $images[$lang][$type]->language_id = $lang; + $images[$lang][$type]->type = $type; + $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile"); + $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid; + } + } + if(empty(\Yii::$app->request->post()['ArticleLang'])) { + $isValid = ArticleLang::validateMultiple($article_langs) && $isValid; + } else { + foreach(\Yii::$app->request->post()['ArticleLang'] as $index => $article_lang) { + if (!array_key_exists($index, $article_langs)) { + $article_langs[$index] = new ArticleLang(); + $article_langs[$index]->article_id = $article->article_id; + } + } + ArticleLang::loadMultiple($article_langs, \Yii::$app->request->post()); + $isValid = ArticleLang::validateMultiple($article_langs) && $isValid; + } + } + if($isValid) { + $article->save(false); + foreach($images as $lang => $value) { + foreach($value as $type => $fields) { + if($type == 'additional') { + $images[$lang][$type][0]->upload($article->id); + } else { + if(!empty($images[$lang][$type]->imageFile)) { + $images[$lang][$type]->replace($article->article_id); + } + } + } + } + foreach($article_langs as $article_lang) { + $article_lang->save(false); + } + echo "ok"; + //$this->redirect('index'); + } else { + return $this->render('update', [ + 'article_langs' => $article_langs, + 'article' => $article, + 'langs' => $langs, + 'images' => $images + ]); + } + } + + public function actionDelete($id) + { + $this->findModel($id)->delete(); + return $this->redirect(['index']); + } + + protected function findModel($id) + { + if (($model = Article::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/common/modules/blog/controllers/CategoryController.php b/common/modules/blog/controllers/CategoryController.php new file mode 100755 index 0000000..505f5b8 --- /dev/null +++ b/common/modules/blog/controllers/CategoryController.php @@ -0,0 +1,219 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['post'] + ] + ] + ]; + } + + public function actionIndex() + { + $dataProvider = new ActiveDataProvider([ + 'query' => ArticleCategory::find(), + 'pagination' => [ + 'pageSize' => 1, + ], + ]); + return $this->render('index', ['dataProvider' => $dataProvider]); + } + + public function actionCreate() + { + $category_langs = array(); + $category = new ArticleCategory(); + $default_lang = Language::getDefaultLang(); + $images = array(); + $images[$default_lang->language_id]['full'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_FULL]); + $images[$default_lang->language_id]['preview'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_PREVIEW]); + $images[0]['additional'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]); + $category->loadDefaultValues(); + $langs = Language::getActiveLanguages(); + $isValid = false; + if(!empty(\Yii::$app->request->post())) { + $isValid = true; + $category->load(\Yii::$app->request->post()); + $isValid = $category->validate(); + foreach(\Yii::$app->request->post()['ArticleCategoryMedia'] as $lang => $value) { + foreach($value as $type => $fields) { + $images[$lang][$type] = new ArticleCategoryMedia(['scenario' => $type]); + $images[$lang][$type]->type = $type; + $images[$lang][$type]->language_id = $lang; + $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile"); + $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid; + } + } + $images[0]['additional']->language_id = 0; + $images[0]['additional']->type = 'additional'; + $images[0]['additional']->imageFile = UploadedFile::getInstances($images[0]['additional'], "[0][additional]imageFile"); + if(empty(\Yii::$app->request->post()['ArticleCategoryLang'])) { + $category_langs[$default_lang->language_id] = new ArticleCategoryLang(); + $isValid = ArticleCategoryLang::validateMultiple($category_langs) && $isValid; + } else { + foreach(\Yii::$app->request->post()['ArticleCategoryLang'] as $index => $category_lang) { + $category_langs[$index] = new ArticleCategoryLang(); + } + ArticleCategoryLang::loadMultiple($category_langs, \Yii::$app->request->post()); + $isValid = ArticleCategoryLang::validateMultiple($category_langs) && $isValid; + } + } else { + $category_langs[$default_lang->language_id] = new ArticleCategoryLang(); + } + if($isValid) { + $category->save(false); + $first = 1; + foreach($images as $lang => $value) { + foreach($value as $type => $fields) { + $images[$lang][$type]->upload($category->article_category_id); + if($first && $type != 'additional') { + $media_clone = clone $images[$lang][$type]; + $media_clone->setIsNewRecord(true); + unset($media_clone->article_category_media_id); + $media_clone->language_id = 0; + $media_clone->upload($category->article_category_id); + unset($media_clone); + $first = 0; + } + } + } + $first = 1; + foreach($category_langs as $category_lang) { + if($first) { + $category_lang_clone = clone $category_lang; + $category_lang_clone->language_id = 0; + $category_lang_clone->link('category', $category); + unset($category_lang_clone); + } + $category_lang->link('category', $category); + $first = 0; + } + echo "ok"; + //$this->redirect('index'); + } else { + return $this->render('create', [ + 'category_langs' => $category_langs, + 'category' => $category, + 'langs' => $langs, + 'images' => $images + ]); + } + } + + public function actionUpdate($id) + { + $category = ArticleCategory::findOne($id); + $imagestack = $category->getArticleCategoryMedia()->all(); + $images = []; + $images[0]['additional'][0] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]); + $images[0]['additional'][0]->type = 'additional'; + $images[0]['additional'][0]->language_id = 0; + foreach($imagestack as $image) { + if(in_array($image->type, ['full', 'preview'])) { + $images[$image->language_id][$image->type] = $image; + $images[$image->language_id][$image->type]->scenario = $image->type; + } else { + $images[$image->language_id][$image->type][$image->article_category_media_id] = $image; + $images[$image->language_id][$image->type][$image->article_category_media_id]->scenario = $image->type; + } + } + foreach($images as $lang => $value) { + $images[$lang]['additional'][0] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]); + } + $category_langs = $category->getArticleCategoryLangs()->where(['>=', 'language_id', '1'])->indexBy('language_id')->all(); + $langs = Language::getActiveLanguages(); + $default_lang = Language::getDefaultLang(); + $isValid = false; + if(!empty(\Yii::$app->request->post())) { + $isValid = true; + $category->load(\Yii::$app->request->post()); + $isValid = $category->validate(); + $images[0]['additional'][0]->type = 'additional'; + $images[0]['additional'][0]->language_id = 0; + $images[0]['additional'][0]->imageFile = UploadedFile::getInstances($images[0]['additional'][0], "[0][additional]imageFile"); + $isValid = $images[0]['additional'][0]->validate(['imageFile']) && $isValid; + foreach(\Yii::$app->request->post()['ArticleCategoryMedia'] as $lang => $value) { + foreach($value as $type => $fields) { + if(!in_array($type, ['full', 'preview'])) continue; + $images[$lang][$type] = new ArticleCategoryMedia(['scenario' => $type]); + $images[$lang][$type]->language_id = $lang; + $images[$lang][$type]->type = $type; + $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile"); + $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid; + } + } + if(empty(\Yii::$app->request->post()['ArticleCategoryLang'])) { + $isValid = ArticleCategoryLang::validateMultiple($category_langs) && $isValid; + } else { + foreach(\Yii::$app->request->post()['ArticleCategoryLang'] as $index => $category_lang) { + if(!array_key_exists($index, $category_langs)) { + $category_langs[$index] = new ArticleCategoryLang(); + $category_langs[$index]->article_category_id = $category->article_category_id; + } + } + ArticleCategoryLang::loadMultiple($category_langs, \Yii::$app->request->post()); + $isValid = ArticleCategoryLang::validateMultiple($category_langs) && $isValid; + } + } + if($isValid) { + $category->save(false); + foreach($images as $lang => $value) { + foreach($value as $type => $fields) { + if($type == 'additional') { + $images[$lang][$type][0]->upload($category->article_category_id); + } else { + if(!empty($images[$lang][$type]->imageFile)) { + $images[$lang][$type]->replace($category->article_category_id); + } + } + } + } + foreach($category_langs as $category_lang) { + $category_lang->save(false); + } + echo "ok"; + //$this->redirect('index'); + } else { + return $this->render('update', [ + 'category_langs' => $category_langs, + 'category' => $category, + 'langs' => $langs, + 'images' => $images + ]); + } + } + + public function actionDelete($id) + { + $this->findModel($id)->delete(); + return $this->redirect(['index']); + } + + protected function findModel($id) + { + if (($model = ArticleCategory::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/common/modules/blog/controllers/DefaultController.php b/common/modules/blog/controllers/DefaultController.php new file mode 100755 index 0000000..81604e5 --- /dev/null +++ b/common/modules/blog/controllers/DefaultController.php @@ -0,0 +1,12 @@ +render('index'); + } +} diff --git a/common/modules/blog/controllers/MediaController.php b/common/modules/blog/controllers/MediaController.php new file mode 100755 index 0000000..43e7920 --- /dev/null +++ b/common/modules/blog/controllers/MediaController.php @@ -0,0 +1,45 @@ +request->isPost) { + $model->imageFile = UploadedFile::getInstance($model, 'imageFile'); + if($model->upload()) { + return true; + } else { + return false; + } + } + return $this->render('index', ['model' => $model]); + } + + public function actionCreate() + { + + } + + public function actionUpdate($id) + { + + } + + public function actionDelete($id) + { + $model = Media::findOne($id); + return $model->delete(); + } + + protected function findModel($id) + { + + } +} diff --git a/common/modules/blog/controllers/TestController.php b/common/modules/blog/controllers/TestController.php new file mode 100755 index 0000000..3039a12 --- /dev/null +++ b/common/modules/blog/controllers/TestController.php @@ -0,0 +1,17 @@ +language_id] = new ArticleLang(); + $model[3] = new ArticleLang(); + return $this->render('index', ['model' => $model]); + } +} \ No newline at end of file diff --git a/common/modules/blog/models/Article.php b/common/modules/blog/models/Article.php new file mode 100755 index 0000000..75c636d --- /dev/null +++ b/common/modules/blog/models/Article.php @@ -0,0 +1,163 @@ + Autocomplete::className(), + 'attributes' => [ + 'translit' => ['code'], + ] + ] + ]; + } + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['sort', 'article_pid', 'status', 'comment', 'vote'], 'integer'], + [['date_add', 'date_update'], 'safe'], + [['code'], 'required'], + [['code', 'tag'], 'string'] + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'article_id' => Yii::t('app', 'ID'), + 'sort' => Yii::t('app', 'Sort'), + 'date_add' => Yii::t('app', 'Create At'), + 'date_update' => Yii::t('app', 'Update At'), + 'code' => Yii::t('app', 'Code'), + 'user_id' => Yii::t('app', 'Author'), + 'tag' => Yii::t('app', 'Tags'), + 'article_pid' => Yii::t('app', 'Parent ID'), + 'status' => Yii::t('app', 'Active'), + 'comment' => Yii::t('app', 'Comments'), + 'vote' => Yii::t('app', 'Voting'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getParent() + { + return $this->hasOne(Article::className(), ['article_id' => 'article_pid']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getArticles() + { + return $this->hasMany(Article::className(), ['article_pid' => 'article_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(User::className(), ['id' => 'user_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getArticleLangs() + { + return $this->hasMany(ArticleLang::className(), ['article_id' => 'article_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getArticleMedia() + { + return $this->hasMany(ArticleMedia::className(), ['article_id' => 'article_id']); + } + + public function getMedia() + { + return $this->hasMany(Media::className(), ['article_id' => 'media_id'])->via('articleMedia'); + } + /** + * @return \yii\db\ActiveQuery + */ + public function getArticleToCategories() + { + return $this->hasMany(ArticleToCategory::className(), ['article_id' => 'article_id']); + } + + public function getArticleCategories() + { + return $this->hasMany(ArticleCategory::className(), ['article_category_id' => 'article_category_id'])->viaTable('article_to_category', ['article_id' => 'article_category_id']); + } + + public static function findArticleDropdown($id) + { + $query = new Query(); + return $query->select(['l.name', 'a.article_id']) + ->from(['article a']) + ->leftJoin(['article_lang l'], 'a.article_id = l.article_id') + ->where(['l.language_id' => 0, 'a.status' => 1]) + ->andWhere(['not', ['a.article_id' => $id]]) + ->indexBy('article_id') + ->column(); + } + + public function getArticleCategoriesArray() + { + return $this->getArticleToCategories()->select('article_category_id')->column(); + } + +} diff --git a/common/modules/blog/models/ArticleCategory.php b/common/modules/blog/models/ArticleCategory.php new file mode 100755 index 0000000..411c61a --- /dev/null +++ b/common/modules/blog/models/ArticleCategory.php @@ -0,0 +1,133 @@ + Autocomplete::className(), + 'attributes' => [ + 'translit' => ['code'], + ] + ] + ]; + } + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['status', 'sort', 'article_category_pid'], 'integer'], + [['code'], 'required'], + [['code', 'tag'], 'string'], + [['date_add', 'date_update'], 'safe'], + [['status'], 'boolean'], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'article_category_id' => Yii::t('app', 'ID'), + 'status' => Yii::t('app', 'Active'), + 'sort' => Yii::t('app', 'Sort'), + 'code' => Yii::t('app', 'Code'), + 'date_add' => Yii::t('app', 'Created At'), + 'date_update' => Yii::t('app', 'Updated At'), + 'tag' => Yii::t('app', 'Tags'), + 'article_category_pid' => Yii::t('app', 'Parent ID'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getArticles() + { + return $this->hasMany(Article::className(), ['article_id' => 'article_id'])->viaTable('article_to_category', ['article_category_id' => 'article_category_id']) ; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getParent() + { + return $this->hasOne(ArticleCategory::className(), ['article_category_id' => 'article_category_pid']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getArticleCategories() + { + return $this->hasMany(ArticleCategory::className(), ['article_category_pid' => 'article_category_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getArticleCategoryLangs() + { + return $this->hasMany(ArticleCategoryLang::className(), ['article_category_id' => 'article_category_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getArticleCategoryMedia() + { + return $this->hasMany(ArticleCategoryMedia::className(), ['article_category_id' => 'article_category_id']); + } + + public static function findArticleCategoryDropdown($id) + { + $query = new Query(); + return $query->select(['l.name', 'c.article_category_id']) + ->from(['article_category c']) + ->leftJoin(['article_category_lang l'], 'c.article_category_id = l.article_category_id') + ->where(['l.language_id' => 0, 'c.status' => 1]) + ->andWhere(['not', ['c.article_category_id' => $id]]) + ->indexBy('article_category_id') + ->column(); + } + +} diff --git a/common/modules/blog/models/ArticleCategoryLang.php b/common/modules/blog/models/ArticleCategoryLang.php new file mode 100755 index 0000000..748f9c1 --- /dev/null +++ b/common/modules/blog/models/ArticleCategoryLang.php @@ -0,0 +1,102 @@ + Autocomplete::className(), + 'attributes' => [ + 'repeat' => [['preview', 'text', false, 5, true, '...']], + ] + ] + ]; + } + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['language_id', 'article_category_id'], 'integer'], + [['text', 'name'], 'required'], + [['text', 'preview', 'seo_url', 'name', 'meta_title', 'meta_descr', 'meta_keyword', 'h1_tag', 'tag'], 'string'], + ['seo_url', function($attribute, $params) { + $pattern = "/^[a-zA-Z\d_-]+$/"; + if(!preg_match($pattern, $this->$attribute)) { + $this->addError($attribute, Yii::t('app', "Pattern doesn't match.")); + } + }] + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'article_category_language_id' => Yii::t('app', 'ID'), + 'language_id' => Yii::t('app', 'Lang ID'), + 'article_category_id' => Yii::t('app', 'Category ID'), + 'text' => Yii::t('app', 'Text'), + 'preview' => Yii::t('app', 'Preview'), + 'seo_url' => Yii::t('app', 'Seo Url'), + 'name' => Yii::t('app', 'Name'), + 'meta_title' => Yii::t('app', 'Meta Title'), + 'meta_descr' => Yii::t('app', 'Meta Descr'), + 'meta_keyword' => Yii::t('app', 'Meta Keywords'), + 'h1_tag' => Yii::t('app', 'H1 Tag'), + 'tag' => Yii::t('app', 'Tags'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getCategory() + { + return $this->hasOne(ArticleCategory::className(), ['article_category_id' => 'article_category_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getLang() + { + return $this->hasOne(Language::className(), ['language_id' => 'language_id']); + } +} diff --git a/common/modules/blog/models/ArticleCategoryMedia.php b/common/modules/blog/models/ArticleCategoryMedia.php new file mode 100755 index 0000000..a8c135c --- /dev/null +++ b/common/modules/blog/models/ArticleCategoryMedia.php @@ -0,0 +1,162 @@ + 10], + [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_FULL], + [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_PREVIEW], + [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'maxFiles' => 10, 'on' => self::SCENARIO_ADDITIONAL] + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'article_category_media_id' => Yii::t('app', 'ID'), + 'article_category_id' => Yii::t('app', 'Category ID'), + 'media_id' => Yii::t('app', 'Media ID'), + 'media_alt' => Yii::t('app', 'Media Alt'), + 'media_title' => Yii::t('app', 'Media Title'), + 'media_caption' => Yii::t('app', 'Media Caption'), + 'type' => Yii::t('app', 'Type'), + 'imageFile' => Yii::t('app', 'Image File'), + 'language_id' => Yii::t('app', 'Language ID'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getCategory() + { + return $this->hasOne(ArticleCategory::className(), ['article_category_id' => 'article_category_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getMedia() + { + return $this->hasOne(Media::className(), ['media_id' => 'media_id']); + } + + public function upload($category_id) + { + $this->article_category_id = $category_id; + if(is_array($this->imageFile)) { + $ok = true; + foreach($this->imageFile as $image) { + $media_category = clone $this; + $media = new Media(); + $media->imageFile = $image; + $media->upload(); + $media_category->media_id = $media->media_id; + $ok = $media_category->save() && $ok; + unset($media_category); + } + return $ok; + } elseif(!empty($this->imageFile)) { + $media = new Media(); + $media->imageFile = $this->imageFile; + $media->upload(); + $this->media_id = $media->media_id; + return $this->save(); + } + } + + public function replace($category_id, $removeMedia = false) + { + $this->article_category_id = $category_id; + if($removeMedia) { + $category_media = ArticleCategoryMedia::find()->select('media_id')->where(['article_category_id' => $this->article_category_id, 'type' => $this->type])->column(); + $media = array(); + foreach($category_media as $media_id) { + $media[] = Media::findOne(['media_id' => $media_id]); + } + $media = array_unique($media); + foreach($media as $one_media) { + if($one_media instanceof Media) { + $one_media->delete(); + } + } + unset($media); + unset($category_media); + } + if(is_array($this->imageFile)) { + $ok = true; + foreach($this->imageFile as $image) { + $media_category = clone $this; + $media = new Media(); + $media->imageFile = $image; + $media->upload(); + $media_category->media_id = $media->media_id; + $ok = $media_category->save() && $ok; + unset($media_category); + } + return $ok; + } elseif(!empty($this->imageFile)) { + ArticleCategoryMedia::deleteAll(['category_id' => $this->article_category_id, 'type' => $this->type]); + $media = new Media(); + $media->imageFile = $this->imageFile; + $media->upload(); + $this->media_id = $media->media_id; + $this->setIsNewRecord(true); + return $this->save(); + } + } + +} diff --git a/common/modules/blog/models/ArticleLang.php b/common/modules/blog/models/ArticleLang.php new file mode 100755 index 0000000..94bf761 --- /dev/null +++ b/common/modules/blog/models/ArticleLang.php @@ -0,0 +1,85 @@ + Yii::t('app', 'ID'), + 'language_id' => Yii::t('app', 'Lang ID'), + 'article_id' => Yii::t('app', 'Article ID'), + 'text' => Yii::t('app', 'Text'), + 'seo_url' => Yii::t('app', 'Seo Url'), + 'name' => Yii::t('app', 'Name'), + 'preview' => Yii::t('app', 'Preview'), + 'meta_title' => Yii::t('app', 'Meta Title'), + 'meta_descr' => Yii::t('app', 'Meta Descr'), + 'meta_keyword' => Yii::t('app', 'Meta Keywords'), + 'h1_tag' => Yii::t('app', 'H1 Tag'), + 'tag' => Yii::t('app', 'Tags'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getArticle() + { + return $this->hasOne(Article::className(), ['article_id' => 'article_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getLang() + { + return $this->hasOne(Language::className(), ['language_id' => 'language_id']); + } +} diff --git a/common/modules/blog/models/ArticleMedia.php b/common/modules/blog/models/ArticleMedia.php new file mode 100755 index 0000000..977f8a8 --- /dev/null +++ b/common/modules/blog/models/ArticleMedia.php @@ -0,0 +1,161 @@ + 10], + [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_FULL], + [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_PREVIEW], + [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'maxFiles' => 10, 'on' => self::SCENARIO_ADDITIONAL] + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'article_media_id' => Yii::t('app', 'ID'), + 'article_id' => Yii::t('app', 'Article ID'), + 'media_id' => Yii::t('app', 'Media ID'), + 'type' => Yii::t('app', 'Type'), + 'media_alt' => Yii::t('app', 'Media Alt'), + 'media_title' => Yii::t('app', 'Media Title'), + 'media_caption' => Yii::t('app', 'Media Caption'), + 'imageFile' => Yii::t('app', 'Image File'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getArticle() + { + return $this->hasOne(Article::className(), ['article_id' => 'article_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getMedia() + { + return $this->hasOne(Media::className(), ['media_id' => 'media_id']); + } + + public function upload($article_id) + { + $this->article_id = $article_id; + if(is_array($this->imageFile)) { + $ok = true; + foreach($this->imageFile as $image) { + $media_article = clone $this; + $media = new Media(); + $media->imageFile = $image; + $media->upload(); + $media_article->media_id = $media->media_id; + $ok = $media_article->save() && $ok; + unset($media_article); + } + return $ok; + } elseif(!empty($this->imageFile)) { + $media = new Media(); + $media->imageFile = $this->imageFile; + $media->upload(); + $this->media_id = $media->media_id; + return $this->save(); + } + } + + public function replace($article_id, $removeMedia = false) + { + $this->article_id = $article_id; + if($removeMedia && !$this->getIsNewRecord()) { + $article_media = ArticleMedia::find()->select('media_id')->where(['article_id' => $this->article_id, 'type' => $this->type, 'language_id' => $this->language_id])->column(); + $media = array(); + foreach($article_media as $media_id) { + $media[] = Media::findOne(['media_id' => $media_id]); + } + $media = array_unique($media); + foreach($media as $one_media) { + if($one_media instanceof Media) { + $one_media->delete(); + } + } + unset($media); + unset($article_media); + } + if(is_array($this->imageFile)) { + $ok = true; + foreach($this->imageFile as $image) { + $media_article = clone $this; + $media = new Media(); + $media->imageFile = $image; + $media->upload(); + $media_article->media_id = $media->media_id; + $ok = $media_article->save() && $ok; + unset($media_article); + } + return $ok; + } elseif(!empty($this->imageFile)) { + ArticleMedia::deleteAll(['article_id' => $this->article_id, 'type' => $this->type, 'language_id' => $this->language_id]); + $media = new Media(); + $media->imageFile = $this->imageFile; + $media->upload(); + $this->media_id = $media->media_id; + $this->setIsNewRecord(true); + return $this->save(); + } + } + +} diff --git a/common/modules/blog/models/ArticleToCategory.php b/common/modules/blog/models/ArticleToCategory.php new file mode 100755 index 0000000..3032fde --- /dev/null +++ b/common/modules/blog/models/ArticleToCategory.php @@ -0,0 +1,62 @@ + Yii::t('app', 'Article ID'), + 'article_category_id' => Yii::t('app', 'Category ID'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getArticle() + { + return $this->hasOne(Article::className(), ['article_id' => 'article_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getCategory() + { + return $this->hasOne(ArticleCategory::className(), ['article_category_id' => 'article_category_id']); + } +} diff --git a/common/modules/blog/views/ajax/_article_form.php b/common/modules/blog/views/ajax/_article_form.php new file mode 100755 index 0000000..22f8b05 --- /dev/null +++ b/common/modules/blog/views/ajax/_article_form.php @@ -0,0 +1,38 @@ + +
    + + $model, 'attribute' => "[$model->language_id]language_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?> + + $model, 'attribute' => "[$model->language_id]text", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?> + + $model, 'attribute' => "[$model->language_id]preview", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?> + + $model, 'attribute' => "[$model->language_id]seo_url"]))->textInput() ?> + + $model, 'attribute' => "[$model->language_id]name"]))->textInput() ?> + + $model, 'attribute' => "[$model->language_id]meta_title"]))->textInput() ?> + + $model, 'attribute' => "[$model->language_id]meta_descr"]))->textarea() ?> + + $model, 'attribute' => "[$model->language_id]meta_keyword"]))->textInput() ?> + + $model, 'attribute' => "[$model->language_id]h1_tag"]))->textInput() ?> + + $model, 'attribute' => "[$model->language_id]tag"]))->textInput() ?> + +
    +end(); + } +?> diff --git a/common/modules/blog/views/ajax/_article_form_test.php b/common/modules/blog/views/ajax/_article_form_test.php new file mode 100755 index 0000000..237311e --- /dev/null +++ b/common/modules/blog/views/ajax/_article_form_test.php @@ -0,0 +1,38 @@ + +
    + + $model, 'attribute' => "[$model->language_id]language_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?> + + $model, 'attribute' => "[$model->language_id]text", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?> + + $model, 'attribute' => "[$model->language_id]preview", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?> + + $model, 'attribute' => "[$model->language_id]seo_url"]))->textInput() ?> + + $model, 'attribute' => "[$model->language_id]name"]))->textInput() ?> + + $model, 'attribute' => "[$model->language_id]meta_title"]))->textInput() ?> + + $model, 'attribute' => "[$model->language_id]meta_descr"]))->textarea() ?> + + $model, 'attribute' => "[$model->language_id]meta_keyword"]))->textInput() ?> + + $model, 'attribute' => "[$model->language_id]h1_tag"]))->textInput() ?> + + $model, 'attribute' => "[$model->language_id]tag"]))->textInput() ?> + +
    +end(); + } +?> diff --git a/common/modules/blog/views/ajax/_article_media_form.php b/common/modules/blog/views/ajax/_article_media_form.php new file mode 100755 index 0000000..6058444 --- /dev/null +++ b/common/modules/blog/views/ajax/_article_media_form.php @@ -0,0 +1,17 @@ + +
    + + $article_lang, 'attribute' => "[$model->language_id][$type]language_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?> + + $article_lang, 'attribute' => "[$model->language_id][$type]imageFile"]))->fileInput(['class' => 'image_inputs_field']) ?> + +
    +end(); +?> diff --git a/common/modules/blog/views/ajax/_category_form.php b/common/modules/blog/views/ajax/_category_form.php new file mode 100755 index 0000000..cff9b7e --- /dev/null +++ b/common/modules/blog/views/ajax/_category_form.php @@ -0,0 +1,33 @@ + +
    + + $category_lang, 'attribute' => "[$model->language_id]language_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?> + + $category_lang, 'attribute' => "[$model->language_id]text", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?> + + $category_lang, 'attribute' => "[$model->language_id]preview", 'form' => $form]))->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ]]); ?> + + $category_lang, 'attribute' => "[$model->language_id]seo_url"]))->textInput() ?> + + $category_lang, 'attribute' => "[$model->language_id]name"]))->textInput() ?> + + $category_lang, 'attribute' => "[$model->language_id]meta_title"]))->textInput() ?> + + $category_lang, 'attribute' => "[$model->language_id]meta_descr"]))->textarea() ?> + + $category_lang, 'attribute' => "[$model->language_id]meta_keyword"]))->textInput() ?> + + $category_lang, 'attribute' => "[$model->language_id]h1_tag"]))->textInput() ?> + + $category_lang, 'attribute' => "[$model->language_id]tag"]))->textInput() ?> + +
    +end(); +?> diff --git a/common/modules/blog/views/article/_form.php b/common/modules/blog/views/article/_form.php new file mode 100755 index 0000000..71d165e --- /dev/null +++ b/common/modules/blog/views/article/_form.php @@ -0,0 +1,172 @@ + +
    + + ['enctype' => 'multipart/form-data']]); ?> + + field($article, 'code')->hint(Yii::t('app', 'Insensitive latin non-space'))->textInput() ?> + + field($article, 'tag')->hint(Yii::t('app', 'Comma-separated'))->textInput() ?> + + field($article, 'sort')->input('number') ?> + + field($article, 'article_pid') + ->dropDownList(Article::findArticleDropdown($article->article_id), ['prompt' => Yii::t('app', 'Select parent')]) ?> + + field($article, 'articleCategoriesArray') + ->dropDownList(ArticleCategory::findArticleCategoryDropdown(NULL), ['multiple' => 'multiple'])->label(\Yii::t('app', 'Article Categories Array')); ?> + + field($article, 'status')->checkbox() ?> + + +
    +
    + Url::to(['/blog/ajax/article-media-form?type=full']), + 'form' => $form, + 'data_langs' => $article->getIsNewRecord()?$images:ArticleMedia::find()->where(['article_id' => $article->article_id, 'type' => 'full'])->indexBy('language_id')->all() + ]); + $first = 1; + foreach($images as $lang => $value) { + if(!array_key_exists('full', $value)) continue; + ?> +
    + field($images[$lang]['full'], "[{$lang}][full]language_id")->label(false)->hiddenInput(['value' => $lang]); + echo $form->field($images[$lang]['full'], "[{$lang}][full]imageFile")->fileInput(['class' => 'image_inputs_field']); + if(!empty($images[$lang]['full']->article_media_id)) { + echo "media->hash}/original.{$images[$lang]['full']->media->extension}' width='100' class='image_inputs_prev'>"; + } + ?> +
    + end(); + ?> +
    +
    + Url::to(['/blog/ajax/article-media-form?type=preview']), + 'form' => $form, + 'data_langs' => $article->getIsNewRecord()?$images:ArticleMedia::find()->where(['article_id' => $article->article_id, 'type' => 'preview'])->indexBy('language_id')->all() + ]); + $first = 1; + foreach($images as $lang => $value) { + if(!array_key_exists('preview', $value)) continue; + ?> +
    + field($images[$lang]['preview'], "[{$lang}][preview]language_id")->label(false)->hiddenInput(['value' => $lang]); + echo $form->field($images[$lang]['preview'], "[{$lang}][preview]imageFile")->fileInput(['class' => 'image_inputs_field']); + if(!empty($images[$lang]['preview']->article_media_id)) { + echo "media->hash}/original.{$images[$lang]['preview']->media->extension}' width='100' class='image_inputs_prev'>"; + } + ?> +
    + end(); + ?> +
    +
    + field(is_array($images[0]['additional'])?$images[0]['additional'][0]:$images[0]['additional'], "[0][additional]imageFile[]")->fileInput(['multiple' => 'multiple', 'class' => 'image_inputs_field']); + if(is_array($images[0]['additional']) && count($images[0]['additional']) > 1) { + foreach($images[0]['additional'] as $onefield => $oneimage) { + if($onefield) { + ?> + + +
    +
    + +
    + + $article_langs, + 'form' => $form, + 'ajaxView' => '@common/modules/blog/views/ajax/_article_form', + ]); + /* + $multilang = Multilang::begin(['ajaxpath' => Url::to(['/blog/ajax/article-form']), 'form' => $form, 'data_langs' => $article_langs]); + ?> + $article_lang) { + ?> +
    + + field($article_langs[$index], "[$index]language_id")->label(false)->hiddenInput(['value' => $index]) ?> + + field($article_langs[$index], "[$index]text")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?> + + field($article_langs[$index], "[$index]preview")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?> + + field($article_langs[$index], "[$index]seo_url")->textInput() ?> + + field($article_langs[$index], "[$index]name")->textInput() ?> + + field($article_langs[$index], "[$index]meta_title")->textInput() ?> + + field($article_langs[$index], "[$index]meta_descr")->textarea(); ?> + + field($article_langs[$index], "[$index]meta_keywords")->textInput() ?> + + field($article_langs[$index], "[$index]h1_tag")->textInput() ?> + + field($article_langs[$index], "[$index]tags")->textInput() ?> + +
    + + end(); + */ + ?> + +
    + isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $article->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
    + + + +
    + \ No newline at end of file diff --git a/common/modules/blog/views/article/create.php b/common/modules/blog/views/article/create.php new file mode 100755 index 0000000..1524640 --- /dev/null +++ b/common/modules/blog/views/article/create.php @@ -0,0 +1,19 @@ +title = Yii::t('app', 'Article create'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Articles'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + + render('_form', [ + 'article_langs' => $article_langs, + 'article' => $article, + 'langs' => $langs, + 'images' => $images + ]) ?> + +
    diff --git a/common/modules/blog/views/article/index.php b/common/modules/blog/views/article/index.php new file mode 100755 index 0000000..8229525 --- /dev/null +++ b/common/modules/blog/views/article/index.php @@ -0,0 +1,32 @@ + $dataProvider, + 'columns' => [ + 'article_id', + 'code', + 'date_add', + [ + 'value' => function($data) { + return $data->user->firstname.' '.$data->user->lastname; + }, + 'header' => Yii::t('app', 'Author') + ], + [ + 'class' => Column::className(), + 'header' => Yii::t('app', 'Name'), + 'content' => function($model, $key, $index, $column) { + return $model->getArticleLangs()->where(['language_id' => Language::getDefaultLang()->language_id])->one()->name; + } + ], + [ + 'class' => ActionColumn::className(), + 'template' => '{update} {delete}' + ] + ] +]); \ No newline at end of file diff --git a/common/modules/blog/views/article/update.php b/common/modules/blog/views/article/update.php new file mode 100755 index 0000000..12f4704 --- /dev/null +++ b/common/modules/blog/views/article/update.php @@ -0,0 +1,18 @@ +title = Yii::t('app', 'Article update'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Articles'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + render('_form', [ + 'article_langs' => $article_langs, + 'article' => $article, + 'langs' => $langs, + 'images' => $images + ]) ?> + +
    diff --git a/common/modules/blog/views/category/_form.php b/common/modules/blog/views/category/_form.php new file mode 100755 index 0000000..71c0d42 --- /dev/null +++ b/common/modules/blog/views/category/_form.php @@ -0,0 +1,158 @@ + +
    + + ['enctype' => 'multipart/form-data']]); ?> + + field($category, 'code')->hint(Yii::t('app', 'Insensitive latin non-space'))->textInput() ?> + + field($category, 'tag')->hint(Yii::t('app', 'Comma-separated'))->textInput() ?> + + field($category, 'sort')->input('number') ?> + + field($category, 'article_category_pid') + ->dropDownList(ArticleCategory::findArticleCategoryDropdown($category->article_category_id), ['prompt' => Yii::t('app', 'Select parent')]) ?> + + field($category, 'status')->checkbox() ?> + + +
    +
    + Url::to(['/blog/ajax/article-category-media-form?type=full']), + 'form' => $form, + 'data_langs' => $category->getIsNewRecord()?$images:ArticleCategoryMedia::find()->where(['article_category_id' => $category->article_category_id, 'type' => 'full'])->indexBy('language_id')->all() + ]); + $first = 1; + foreach($images as $lang => $value) { + if(!array_key_exists('full', $value)) continue; + ?> +
    + field($images[$lang]['full'], "[{$lang}][full]language_id")->label(false)->hiddenInput(['value' => $lang]); + echo $form->field($images[$lang]['full'], "[{$lang}][full]imageFile")->fileInput(['class' => 'image_inputs_field']); + if(!empty($images[$lang]['full']->article_category_media_id)) { + echo "media->hash}/original.{$images[$lang]['full']->media->extension}' width='100' class='image_inputs_prev'>"; + } + ?> +
    + end(); + ?> +
    +
    + Url::to(['/blog/ajax/article-category-media-form?type=preview']), + 'form' => $form, + 'data_langs' => $category->getIsNewRecord()?$images:ArticleCategoryMedia::find()->where(['article_category_id' => $category->article_category_id, 'type' => 'preview'])->indexBy('language_id')->all() + ]); + $first = 1; + foreach($images as $lang => $value) { + if(!array_key_exists('preview', $value)) continue; + ?> +
    + field($images[$lang]['preview'], "[{$lang}][preview]language_id")->label(false)->hiddenInput(['value' => $lang]); + echo $form->field($images[$lang]['preview'], "[{$lang}][preview]imageFile")->fileInput(['class' => 'image_inputs_field']); + if(!empty($images[$lang]['preview']->article_category_media_id)) { + echo "media->hash}/original.{$images[$lang]['preview']->media->extension}' width='100' class='image_inputs_prev'>"; + } + ?> +
    + end(); + ?> +
    +
    + field(is_array($images[0]['additional'])?$images[0]['additional'][0]:$images[0]['additional'], "[0][additional]imageFile[]")->fileInput(['multiple' => 'multiple', 'class' => 'image_inputs_field']); + if(is_array($images[0]['additional']) && count($images[0]['additional']) > 1) { + foreach($images[0]['additional'] as $onefield => $oneimage) { + if($onefield) { + ?> + + +
    +
    + +
    + + Url::to(['/blog/ajax/category-form']), 'form' => $form, 'data_langs' => $category_langs]) + ?> + $category_lang) { + ?> +
    + field($category_langs[$index], "[$index]language_id")->label(false)->hiddenInput(['value' => $index]) ?> + + field($category_langs[$index], "[$index]text")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?> + + field($category_langs[$index], "[$index]preview")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?> + + field($category_langs[$index], "[$index]seo_url")->textInput() ?> + + field($category_langs[$index], "[$index]name")->textInput() ?> + + field($category_langs[$index], "[$index]meta_title")->textInput() ?> + + field($category_langs[$index], "[$index]meta_descr")->textarea(); ?> + + field($category_langs[$index], "[$index]meta_keyword")->textInput() ?> + + field($category_langs[$index], "[$index]h1_tag")->textInput() ?> + + field($category_langs[$index], "[$index]tag")->textInput() ?> + +
    + + end(); + ?> + +
    + isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $category->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
    + + + +
    + \ No newline at end of file diff --git a/common/modules/blog/views/category/create.php b/common/modules/blog/views/category/create.php new file mode 100755 index 0000000..dc19a6f --- /dev/null +++ b/common/modules/blog/views/category/create.php @@ -0,0 +1,19 @@ +title = Yii::t('app', 'Category create'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Categories'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + + render('_form', [ + 'category_langs' => $category_langs, + 'category' => $category, + 'langs' => $langs, + 'images' => $images + ]) ?> + +
    diff --git a/common/modules/blog/views/category/index.php b/common/modules/blog/views/category/index.php new file mode 100755 index 0000000..dce7f03 --- /dev/null +++ b/common/modules/blog/views/category/index.php @@ -0,0 +1,26 @@ + $dataProvider, + 'columns' => [ + 'article_category_id', + 'code', + 'date_add', + 'date_update', + [ + 'class' => Column::className(), + 'header' => Yii::t('app', 'Name'), + 'content' => function($model, $key, $index, $column) { + return $model->getArticleCategoryLangs()->orderBy(['language_id' => 'ASC'])->one()->name; + } + ], + [ + 'class' => ActionColumn::className(), + 'template' => '{update} {delete}' + ] + ] +]); \ No newline at end of file diff --git a/common/modules/blog/views/category/update.php b/common/modules/blog/views/category/update.php new file mode 100755 index 0000000..57e81e3 --- /dev/null +++ b/common/modules/blog/views/category/update.php @@ -0,0 +1,18 @@ +title = Yii::t('app', 'Update category'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Categories'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + render('_form', [ + 'category_langs' => $category_langs, + 'category' => $category, + 'langs' => $langs, + 'images' => $images + ]) ?> + +
    diff --git a/common/modules/blog/views/default/index.php b/common/modules/blog/views/default/index.php new file mode 100755 index 0000000..efb5c35 --- /dev/null +++ b/common/modules/blog/views/default/index.php @@ -0,0 +1,7 @@ +value); \ No newline at end of file diff --git a/common/modules/blog/views/media/index.php b/common/modules/blog/views/media/index.php new file mode 100755 index 0000000..e536935 --- /dev/null +++ b/common/modules/blog/views/media/index.php @@ -0,0 +1,37 @@ + ['enctype' => 'multipart/form-data']]); + +echo $form->field($model, 'imageFile')->fileInput(['multiple' => 'multiple']); + +?> + your image +
    + 'btn btn-success']) ?> +
    + + diff --git a/common/modules/blog/views/test/index.php b/common/modules/blog/views/test/index.php new file mode 100755 index 0000000..f24ade0 --- /dev/null +++ b/common/modules/blog/views/test/index.php @@ -0,0 +1,11 @@ + $model, + 'form' => $form, + 'ajaxView' => '@common/modules/blog/views/ajax/_article_form_test', +]); +$form->end(); \ No newline at end of file diff --git a/common/modules/comment/Module.php b/common/modules/comment/Module.php new file mode 100755 index 0000000..cb0473c --- /dev/null +++ b/common/modules/comment/Module.php @@ -0,0 +1,89 @@ +db + */ + public $db = NULL; + + /** + * Key, used to encrypt and decrypt comment service data. + * + * @var string Encryption key + */ + public static $encryptionKey = 'artbox-comment'; + + /** + * Whether to enable comment rating or not. + * + * @var bool + */ + public static $enableRating = true; + + /** + * Initializes the module. + * This method is called after the module is created and initialized with property values + * given in configuration. The default implementation will initialize + * [[controllerNamespace]] if it is not set. If you override this method, please make sure + * you call the parent implementation. + */ + public function init() + { + if($this->userIdentityClass === NULL) { + $this->userIdentityClass = Yii::$app->getUser()->identityClass; + } + if($this->commentModelClass === NULL) { + $this->commentModelClass = CommentModel::className(); + } + if(self::$enableRating && $this->ratingModelClass === NULL) { + $this->ratingModelClass = RatingModel::className(); + } + if(\Yii::$app instanceof \yii\console\Application) { + $this->controllerNamespace = 'common\modules\comment\commands'; + } + if($this->db === NULL) { + $this->db = \Yii::$app->db; + } + Yii::setAlias('@artbox-comment', __DIR__); + parent::init(); + } + + } diff --git a/common/modules/comment/assets/CommentAsset.php b/common/modules/comment/assets/CommentAsset.php new file mode 100755 index 0000000..62492bc --- /dev/null +++ b/common/modules/comment/assets/CommentAsset.php @@ -0,0 +1,41 @@ + 'afterValidate', + ]; + } + + /** + * @param Event $event + */ + public function afterValidate($event) { + /** + * @var CommentModel $owner + */ + $owner = $this->owner; + if(!empty($owner->artbox_comment_pid)) { + /** + * @var CommentModel $parent + */ + $parent = CommentModel::find()->where(['artbox_comment_id' => $owner->artbox_comment_pid])->one(); + if(!empty($parent->artbox_comment_pid)) { + $owner->related_id = $owner->artbox_comment_pid; + $owner->artbox_comment_pid = $parent->artbox_comment_pid; + } + } + } + } \ No newline at end of file diff --git a/common/modules/comment/controllers/DefaultController.php b/common/modules/comment/controllers/DefaultController.php new file mode 100755 index 0000000..b4b0de0 --- /dev/null +++ b/common/modules/comment/controllers/DefaultController.php @@ -0,0 +1,139 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'create' => [ 'post' ], + 'delete' => [ + 'post', + 'delete', + ], + ], + ], + 'access' => [ + 'class' => AccessControl::className(), + 'only' => [ 'delete' ], + 'rules' => [ + [ + 'allow' => true, + 'roles' => [ '@' ], + ], + ], + ], + ]; + } + + /** + * Create comment. + * @return array|null|Response + */ + public function actionCreate(string $entity) + { + \Yii::$app->response->format = Response::FORMAT_JSON; + /* @var $module Module */ + $module = \Yii::$app->getModule(Module::$name); + $entity_data_json = \Yii::$app->getSecurity() + ->decryptByKey($entity, $module::$encryptionKey); + if($entity_data_json != false) { + $entity_data = Json::decode($entity_data_json); + $commentModelClass = $module->commentModelClass; + /** + * @var CommentModel $model + */ + $model = new $commentModelClass([ + 'scenario' => \Yii::$app->user->getIsGuest() ? $commentModelClass::SCENARIO_GUEST : $commentModelClass::SCENARIO_USER, + ]); + if($model->load(\Yii::$app->request->post())) { + $model->setAttributes($entity_data); + if($model->save()) { + if(empty( $model->artbox_comment_pid ) && $module::$enableRating) { + $ratingModelClass = $module->ratingModelClass; + /** + * @var RatingModel $rating + */ + $rating = new $ratingModelClass([ + 'model' => $model::className(), + 'model_id' => $model->primaryKey, + ]); + if($rating->load(\Yii::$app->request->post())) { + $rating->save(); + } + } + \Yii::$app->session->setFlash('artbox_comment_success', \Yii::t('artbox-comment', 'Comment posted')); + return [ 'status' => 'success' ]; + } else { + return [ + 'status' => 'error', + 'errors' => $model->getFirstErrors(), + ]; + } + } + } + return [ + 'status' => 'error', + 'message' => \Yii::t('artbox-comment', 'Oops, something went wrong. Please try again later.'), + ]; + } + + /** + * Delete comment. + * + * @param integer $id Comment ID + * + * @return string Comment text + */ + public function actionDelete($id) + { + \Yii::$app->response->format = Response::FORMAT_JSON; + $model = $this->findModel($id); + if($model->deleteComment()) { + return [ + 'status' => 'success', + 'message' => \Yii::t('yii2mod.comments', 'Comment has been deleted.'), + ]; + } else { + \Yii::$app->response->setStatusCode(500); + return \Yii::t('yii2mod.comments', 'Comment has not been deleted. Please try again!'); + } + } + + /** + * Find model by ID. + * + * @param integer|array $id Comment ID + * + * @return CommentModel + * @throws NotFoundHttpException + */ + protected function findModel(int $id): CommentModel + { + /** @var CommentModel $model */ + $commentModelClass = \Yii::$app->getModule(Module::$name)->commentModelClass; + if(( $model = $commentModelClass::findOne($id) ) !== NULL) { + return $model; + } else { + throw new NotFoundHttpException(\Yii::t('yii2mod.comments', 'The requested page does not exist.')); + } + } + } \ No newline at end of file diff --git a/common/modules/comment/controllers/ManageController.php b/common/modules/comment/controllers/ManageController.php new file mode 100755 index 0000000..3a63045 --- /dev/null +++ b/common/modules/comment/controllers/ManageController.php @@ -0,0 +1,108 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'index' => ['get'], + 'update' => ['get', 'post'], + 'delete' => ['post'], + ], + ], + ]; + } + + /** + * Lists all comments. + * + * @return mixed + */ + public function actionIndex() + { + $searchModel = new CommentModelSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + $commentModel = Yii::$app->getModule(Module::$name)->commentModelClass; + + return $this->render('index', [ + 'dataProvider' => $dataProvider, + 'searchModel' => $searchModel, + 'commentModel' => $commentModel + ]); + } + + /** + * Updates an existing CommentModel model. + * + * If update is successful, the browser will be redirected to the 'view' page. + * + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + Yii::$app->session->setFlash('artbox_comment_success', /*Yii::t('yii2mod.comments', 'Comment has been saved.')*/'Comment has been saved.'); + return $this->redirect(['index']); + } + + return $this->render('update', [ + 'model' => $model, + ]); + + } + + /** + * Deletes an existing CommentModel model. + * + * If deletion is successful, the browser will be redirected to the 'index' page. + * + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + Yii::$app->session->setFlash('artbox_comment_success', Yii::t('artbox-comment', 'Comment has been deleted.')); + return $this->redirect(['index']); + } + + /** + * Finds the CommentModel model based on its primary key value. + * + * If the model is not found, a 404 HTTP exception will be thrown. + * + * @param integer $id + * @return CommentModel the loaded model + * + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = CommentModel::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException(/*Yii::t('yii2mod.comments', 'The requested page does not exist.')*/'The requested page does not exist.'); + } + } +} \ No newline at end of file diff --git a/common/modules/comment/messages/config.php b/common/modules/comment/messages/config.php new file mode 100755 index 0000000..34cdfe6 --- /dev/null +++ b/common/modules/comment/messages/config.php @@ -0,0 +1,58 @@ + __DIR__ . DIRECTORY_SEPARATOR . '..', + // array, required, list of language codes that the extracted messages + // should be translated to. For example, ['zh-CN', 'de']. + 'languages' => ['en', 'ru'], + // string, the name of the function for translating messages. + // Defaults to 'Yii::t'. This is used as a mark to find the messages to be + // translated. You may use a string for single function name or an array for + // multiple function names. + 'translator' => 'Yii::t', + // boolean, whether to sort messages by keys when merging new messages + // with the existing ones. Defaults to false, which means the new (untranslated) + // messages will be separated from the old (translated) ones. + 'sort' => true, + // boolean, whether to remove messages that no longer appear in the source code. + // Defaults to false, which means each of these messages will be enclosed with a pair of '@@' marks. + 'removeUnused' => false, + // array, list of patterns that specify which files (not directories) should be processed. + // If empty or not set, all files will be processed. + // Please refer to "except" for details about the patterns. + 'only' => ['*.php'], + // array, list of patterns that specify which files/directories should NOT be processed. + // If empty or not set, all files/directories will be processed. + // A path matches a pattern if it contains the pattern string at its end. For example, + // '/a/b' will match all files and directories ending with '/a/b'; + // the '*.svn' will match all files and directories whose name ends with '.svn'. + // and the '.svn' will match all files and directories named exactly '.svn'. + // Note, the '/' characters in a pattern matches both '/' and '\'. + // See helpers/FileHelper::findFiles() description for more details on pattern matching rules. + // If a file/directory matches both a pattern in "only" and "except", it will NOT be processed. + 'except' => [ + '.svn', + '.git', + '.gitignore', + '.gitkeep', + '.hgignore', + '.hgkeep', + '/messages', + '/tests', + '/runtime', + '/vendor', + ], + + // 'php' output format is for saving messages to php files. + 'format' => 'php', + // Root directory containing message translations. + 'messagePath' => __DIR__, + // boolean, whether the message file should be overwritten with the merged messages + 'overwrite' => true, + + // Message categories to ignore + 'ignoreCategories' => [ + 'yii', + ], +]; diff --git a/common/modules/comment/messages/en/artbox-comment.php b/common/modules/comment/messages/en/artbox-comment.php new file mode 100755 index 0000000..3fef9ec --- /dev/null +++ b/common/modules/comment/messages/en/artbox-comment.php @@ -0,0 +1,60 @@ + 'ID', + 'Text' => 'Content', + 'Entity' => 'Entity', + 'Entity ID' => 'Entity ID', + 'Parent ID' => 'Parent ID', + 'Status' => 'Status', + 'Level' => 'Level', + 'User' => 'User', + 'Username' => 'User name', + 'Date add' => 'Date add', + 'Date update' => 'Date update', + 'Date delete' => 'Date delete', + 'Comment parent' => 'Parent comment', + 'Comment related' => 'Related comment', + 'Info' => 'Additional info', + 'Created by' => 'Created by', + 'Updated by' => 'Related to', + 'Related to' => 'Related to', + 'Created date' => 'Created date', + 'Updated date' => 'Updated date', + 'Update' => 'Update', + 'Delete' => 'Delete', + 'Reply' => 'Reply', + 'Comments ({0})' => 'Comments ({0})', + 'Comment cannot be blank.' => 'Comment cannot be blank.', + 'Comment has not been deleted. Please try again!' => 'Comment has not been deleted. Please try again!', + 'Add a comment...' => 'Add a comment...', + 'Comment' => 'Comment', + 'Oops, something went wrong. Please try again later.' => 'Oops, something went wrong. Please try again later.', + 'The requested page does not exist.' => 'The requested page does not exist.', + 'Comment has been deleted.' => 'Comment has been deleted.', + 'Comment has been saved.' => 'Comment has been saved.', + 'Click here to cancel reply.' => 'Click here to cancel reply.', + 'Comments Management' => 'Comments Management', + 'Select Status' => 'Select Status', + 'Select Author' => 'Select Author', + 'Update Comment: {0}' => 'Update Comment: {0}', + 'Active' => 'Active', + 'Deleted' => 'Deleted', + 'Comment posted' => 'Comment successfully added and will appear after moderator check.', +]; diff --git a/common/modules/comment/messages/ru/artbox-comment.php b/common/modules/comment/messages/ru/artbox-comment.php new file mode 100755 index 0000000..81b0d22 --- /dev/null +++ b/common/modules/comment/messages/ru/artbox-comment.php @@ -0,0 +1,59 @@ + 'Идентификатор', + 'Text' => 'Комментарий', + 'Entity' => 'Модель', + 'Entity ID' => 'Идентификатор модели', + 'Parent ID' => 'Родитель', + 'Status' => 'Статус', + 'Level' => 'Уровень', + 'User' => 'Пользователь', + 'Username' => 'Имя', + 'Date add' => 'Дата добавления', + 'Date update' => 'Дата обновления', + 'Date delete' => 'Дата удаления', + 'Comment parent' => 'Родитель', + 'Comment related' => 'Связзанный комментарий', + 'Info' => 'Дополнительная информация', + 'Created by' => 'Создан', + 'Updated by' => 'Обновлен', + 'Related to' => 'Относится к', + 'Created date' => 'Дата создания', + 'Updated date' => 'Дата обновления', + 'Update' => 'Обновить', + 'Delete' => 'Удалить', + 'Reply' => 'Ответить', + 'Comments ({0})' => 'Комментарии ({0})', + 'Comment cannot be blank.' => 'Комментарий не может быть пустым.', + 'Comment has not been deleted. Please try again!' => 'Не удалось удалить комментарий. Попробуйте пожалуйста еще раз!', + 'Add a comment...' => 'Добавить комментарий...', + 'Comment' => 'Опубликовать комментарий', + 'Oops, something went wrong. Please try again later.' => 'Не удалось добавить комментарий. Попробуйте пожалуйста еще раз.', + 'The requested page does not exist.' => 'Ошибка 404 - страница не найдена!', + 'Comment has been deleted.' => 'Комментарий был удалён.', + 'Comment has been saved.' => 'Комментарий был сохранён.', + 'Click here to cancel reply.' => 'Нажмите здесь, чтобы отменить ответ.', + 'Comments Management' => 'Управление Комментариями', + 'Select Status' => 'Выберите Статус', + 'Select Author' => 'Выберите Автора', + 'Update Comment: {0}' => 'Обновить комментарий: {0}', + 'Active' => 'Включён', + 'Deleted' => 'Удален', + 'Comment posted' => 'Комментарий успешно добавлен и появится после проверки администрацией.', + 'Submit' => 'Добавить комментарий', + 'Cancel' => 'Отменить', + 'Guest' => 'Гость', + ]; diff --git a/common/modules/comment/migrations/m160724_162347_artbox_comment.php b/common/modules/comment/migrations/m160724_162347_artbox_comment.php new file mode 100755 index 0000000..93028c3 --- /dev/null +++ b/common/modules/comment/migrations/m160724_162347_artbox_comment.php @@ -0,0 +1,54 @@ +createTable('{{%artbox_comment}}', [ + 'artbox_comment_id' => $this->primaryKey(), + 'text' => $this->text()->notNull(), + 'user_id' => $this->integer(), + 'username' => $this->string(), + 'email' => $this->string(), + 'date_add' => $this->integer()->notNull(), + 'date_update' => $this->integer()->notNull(), + 'date_delete' => $this->integer(), + 'status' => $this->integer()->notNull()->defaultValue(1), + 'artbox_comment_pid' => $this->integer(), + 'related_id' => $this->integer(), + 'ip' => $this->string()->notNull(), + 'info' => $this->text(), + ]); + + $this->addForeignKey('user_id_user', '{{%artbox_comment}}', 'user_id', 'customer', 'id', 'CASCADE', 'CASCADE'); + $this->addForeignKey('artbox_comment_pid_artbox_comment', '{{%artbox_comment}}', 'artbox_comment_pid', 'artbox_comment', 'artbox_comment_id', 'CASCADE', 'CASCADE'); + $this->addForeignKey('related_id_artbox_comment', '{{%artbox_comment}}', 'related_id', 'artbox_comment', 'artbox_comment_id', 'CASCADE', 'CASCADE'); + + $this->createTable('{{%artbox_like}}', [ + 'artbox_like_id' => $this->primaryKey(), + 'artbox_comment_id' => $this->integer()->notNull(), + 'user_id' => $this->integer(), + 'date_add' => $this->integer()->notNull(), + 'is_like' => $this->integer()->notNull()->defaultValue(1), + ]); + + $this->addForeignKey('artbox_comment_id_artbox_comment', '{{%artbox_like}}', 'artbox_comment_id', 'artbox_comment', 'artbox_comment_id', 'CASCADE', 'CASCADE'); + $this->addForeignKey('user_id_user', '{{%artbox_like}}', 'user_id', 'customer', 'id', 'CASCADE', 'CASCADE'); + $this->createIndex('artbox_like_unique', '{{%artbox_like}}', ['artbox_comment_id', 'user_id', 'is_like'], true); + + } + + public function down() + { + $this->dropForeignKey('user_id_user', '{{%artbox_comment}}'); + $this->dropForeignKey('artbox_comment_pid_artbox_comment', '{{%artbox_comment}}'); + $this->dropForeignKey('related_id_artbox_comment', '{{%artbox_comment}}'); + $this->dropForeignKey('artbox_comment_id_artbox_comment', '{{%artbox_like}}'); + $this->dropForeignKey('user_id_user', '{{%artbox_like}}'); + $this->dropIndex('artbox_like_unique', '{{%artbox_like}}'); + $this->dropTable('{{%artbox_comment}}'); + $this->dropTable('{{%artbox_like}}'); + } +} diff --git a/common/modules/comment/migrations/m160726_092634_add_entity_fields.php b/common/modules/comment/migrations/m160726_092634_add_entity_fields.php new file mode 100755 index 0000000..16d8193 --- /dev/null +++ b/common/modules/comment/migrations/m160726_092634_add_entity_fields.php @@ -0,0 +1,18 @@ +addColumn('{{%artbox_comment}}', 'entity', $this->string()->notNull()->defaultValue('')); + $this->addColumn('{{%artbox_comment}}', 'entity_id', $this->integer()->notNull()->defaultValue(1)); + } + + public function down() + { + $this->dropColumn('{{%artbox_comment}}', 'entity'); + $this->dropColumn('{{%artbox_comment}}', 'entity_id'); + } +} diff --git a/common/modules/comment/migrations/m160726_211227_create_artbox_comment_rating.php b/common/modules/comment/migrations/m160726_211227_create_artbox_comment_rating.php new file mode 100755 index 0000000..2f0848e --- /dev/null +++ b/common/modules/comment/migrations/m160726_211227_create_artbox_comment_rating.php @@ -0,0 +1,31 @@ +createTable('{{%artbox_comment_rating}}', [ + 'artbox_comment_rating_id' => $this->primaryKey(), + 'date_add' => $this->integer() + ->notNull(), + 'date_update' => $this->integer() + ->notNull(), + 'user_id' => $this->integer(), + 'value' => $this->float(), + 'model' => $this->string() + ->notNull(), + 'model_id' => $this->integer() + ->notNull(), + ]); + $this->addForeignKey('user_id_user', '{{%artbox_comment_rating}}', 'user_id', 'customer', 'id', 'CASCADE', 'CASCADE'); + } + + public function down() + { + $this->dropForeignKey('user_id_user', '{{%artbox_comment_rating}}'); + $this->dropTable('{{%artbox_comment_rating}}'); + } + } diff --git a/common/modules/comment/models/CommentModel.php b/common/modules/comment/models/CommentModel.php new file mode 100755 index 0000000..576bbb8 --- /dev/null +++ b/common/modules/comment/models/CommentModel.php @@ -0,0 +1,247 @@ + self::SCENARIO_GUEST, + ], + [ + [ + 'text', + 'entity', + 'username', + ], + 'string', + ], + [ + [ + 'email', + ], + 'email', + ], + [ + [ 'entity_id', 'artbox_comment_pid' ], + 'integer', + ], + [ + [ 'status' ], + 'default', + 'value' => 0, + ], + [ + ['artbox_comment_pid'], + 'exist', + 'targetAttribute' => 'artbox_comment_id', + 'skipOnError' => true, + ], + ]; + } + + public function behaviors() + { + return [ + [ + 'class' => TimestampBehavior::className(), + 'createdAtAttribute' => 'date_add', + 'updatedAtAttribute' => 'date_update', + ], + [ + 'class' => BlameableBehavior::className(), + 'createdByAttribute' => 'user_id', + 'updatedByAttribute' => false, + ], + [ + 'class' => AttributeBehavior::className(), + 'attributes' => [ + ActiveRecord::EVENT_BEFORE_INSERT => 'ip', + ], + 'value' => function($event) { + return \Yii::$app->request->userIP; + }, + ], + [ + 'class' => ParentBehavior::className(), + ], + [ + 'class' => RatingBehavior::className(), + ], + /* Notification: uncomment to enable notifications. + [ + 'class' => NotifyBehavior::className(), + ], + */ + ]; + } + + public function attributeLabels() + { + return [ + 'artbox_comment_id' => \Yii::t('artbox-comment', 'ID'), + 'text' => \Yii::t('artbox-comment', 'Text'), + 'user_id' => \Yii::t('artbox-comment', 'User'), + 'username' => \Yii::t('artbox-comment', 'Username'), + 'email' => 'Email', + 'date_add' => \Yii::t('artbox-comment', 'Date add'), + 'date_update' => \Yii::t('artbox-comment', 'Date update'), + 'date_delete' => \Yii::t('artbox-comment', 'Date delete'), + 'status' => \Yii::t('artbox-comment', 'Status'), + 'artbox_comment_pid' => \Yii::t('artbox-comment', 'Comment parent'), + 'related_id' => \Yii::t('artbox-comment', 'Comment related'), + 'ip' => 'IP', + 'entity' => \Yii::t('artbox-comment', 'Entity'), + 'info' => \Yii::t('artbox-comment', 'Info'), + 'entity_id' => \Yii::t('artbox-comment', 'Entity ID'), + ]; + } + + function setEntity( $entity) + { + $this->entity = $entity; + } + + function getEntity() + { + return $this->entity; + } + + static function getTree( $entity, $entityId) + { + return new ActiveDataProvider([ + 'query' => self::find() + ->with([ + 'children', + 'user', + 'children.user', + ]) + ->where([ + 'entity' => $entity, + 'entity_id' => $entityId, + 'status' => 1, + 'artbox_comment_pid' => NULL, + ]), + 'pagination' => [ + 'pageSize' => 20, + ], + 'sort' => [ + 'defaultOrder' => [ + 'date_add' => SORT_DESC, + ], + ], + ]); + } + + function deleteComment() { + if(\Yii::$app->user->id != NULL && \Yii::$app->user->id == $this->user_id) { + if($this->delete()) { + return true; + } + } + return false; + } + + function setEntityId( $entityId) + { + $this->entityId = $entityId; + } + + function getEntityId() + { + return $this->entityId; + } + + function getChildren() + { + return $this->hasMany(self::className(), [ 'artbox_comment_pid' => 'artbox_comment_id' ]) + ->andFilterWhere(['status' => self::STATUS_ACTIVE]) + ->inverseOf('parent'); + } + + function getParent() + { + return $this->hasOne(self::className(), [ 'artbox_comment_id' => 'artbox_comment_pid' ]) + ->inverseOf('children'); + } + + function getUser() + { + $module = \Yii::$app->getModule('artbox-comment'); + return $this->hasOne($module->userIdentityClass, [ 'id' => 'user_id' ]); + } + + function getRating() + { + return $this->hasOne(RatingModel::className(), ['model_id' => 'artbox_comment_id'])->andWhere(['or', ['artbox_comment_rating.model' => NULL], ['artbox_comment_rating.model' => self::className()] ]); + } + } \ No newline at end of file diff --git a/common/modules/comment/models/CommentModelSearch.php b/common/modules/comment/models/CommentModelSearch.php new file mode 100755 index 0000000..7c3b9cb --- /dev/null +++ b/common/modules/comment/models/CommentModelSearch.php @@ -0,0 +1,204 @@ + 0, + ], + [ + [ + 'rating_value', + ], + 'number', + 'min' => 1, + 'max' => 5, + ], + [ + [ + 'user_id', + 'text', + 'username', + 'email', + 'ip', + 'entity', + 'info', + ], + 'safe', + ], + ]; + } + + public function attributeLabels() + { + return array_merge(parent::attributeLabels(), [ + 'rating_value' => 'Рейтинг', + 'children_count' => 'Количество ответов', + ]); + } + + /** + * @inheritdoc + */ + public function scenarios() + { + // bypass scenarios() implementation in the parent class + return Model::scenarios(); + } + + /** + * Creates data provider instance with search query applied + * + * @param array $params + * + * @return ActiveDataProvider + */ + public function search($params) + { + $query = CommentModel::find() + ->joinWith([ + 'rating', + 'user', + ]); + + // add conditions that should always apply here + + $dataProvider = new ActiveDataProvider([ + 'query' => $query, + 'sort' => [ + 'attributes' => [ + 'rating_value' => [ + 'asc' => [ 'artbox_comment_rating.value' => SORT_ASC ], + 'desc' => [ 'artbox_comment_rating.value' => SORT_DESC ], + ], + 'artbox_comment_id', + 'date_add', + 'text', + 'user_id', + 'status', + 'entity', + 'entity_id', + ], + 'defaultOrder' => [ + 'date_add' => SORT_DESC, + ], + ], + ]); + + $this->load($params); + + if(!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'artbox_comment_id' => $this->artbox_comment_id, + 'date_add' => $this->date_add, + 'date_update' => $this->date_update, + 'date_delete' => $this->date_delete, + 'artbox_comment.status' => $this->status, + 'artbox_comment_pid' => $this->artbox_comment_pid, + 'related_id' => $this->related_id, + 'entity_id' => $this->entity_id, + ]); + + $query->andFilterWhere([ + 'like', + 'text', + $this->text, + ]) + ->andFilterWhere([ + 'like', + 'username', + $this->username, + ]) + ->andFilterWhere([ + 'like', + 'email', + $this->email, + ]) + ->andFilterWhere([ + 'like', + 'ip', + $this->ip, + ]) + ->andFilterWhere([ + 'like', + 'entity', + $this->entity, + ]) + ->andFilterWhere([ + 'like', + 'info', + $this->info, + ]) + ->andFilterWhere([ + 'artbox_comment_rating.value' => $this->rating_value, + ]); + + if(!empty( $this->user_id )) { + $query->andWhere([ + 'or', + [ 'artbox_comment.user_id' => (int) $this->user_id ], + [ + 'like', + 'user.username', + $this->user_id, + ], + [ + 'like', + 'artbox_comment.username', + $this->user_id, + ], + [ + 'like', + 'artbox_comment.email', + $this->user_id, + ], + ]); + } + + return $dataProvider; + } + } diff --git a/common/modules/comment/models/LikeModel.php b/common/modules/comment/models/LikeModel.php new file mode 100755 index 0000000..8ad420e --- /dev/null +++ b/common/modules/comment/models/LikeModel.php @@ -0,0 +1,14 @@ + 0.5, 'max' => 5], + ]; + } + + public function behaviors() + { + return [ + [ + 'class' => TimestampBehavior::className(), + 'createdAtAttribute' => 'date_add', + 'updatedAtAttribute' => 'date_update', + ], + [ + 'class' => BlameableBehavior::className(), + 'createdByAttribute' => 'user_id', + 'updatedByAttribute' => false, + ], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'rating_id' => Yii::t('app', 'Rating ID'), + 'date_add' => Yii::t('app', 'Date Add'), + 'date_update' => Yii::t('app', 'Date Update'), + 'user_id' => Yii::t('app', 'User ID'), + 'entity' => Yii::t('app', 'Entity'), + 'value' => Yii::t('app', 'Value'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getUser() + { + return $this->hasOne(\common\models\User::className(), ['id' => 'user_id']); + } + + public function getModel() + { + $model = $this->model; + return $this->hasOne($model, [$model::primaryKey() => 'model_id']); + } +} diff --git a/common/modules/comment/models/interfaces/CommentInterface.php b/common/modules/comment/models/interfaces/CommentInterface.php new file mode 100755 index 0000000..342c4d1 --- /dev/null +++ b/common/modules/comment/models/interfaces/CommentInterface.php @@ -0,0 +1,23 @@ + [ + ... + 'artbox-comment' => [ + 'class' => 'common\modules\comment\Module', + ], +], +3. Добавляем в конфиг переводы: +'i18n' => [ + 'translations' => [ + ... + 'artbox-comment' => [ + 'class' => 'yii\i18n\PhpMessageSource', + 'basePath' => '@common/modules/comment/messages', + ], + ], +], +4. Для управления добавляем в конфиги админки карту контроллера: +'controllerMap' => [ + ... + 'artbox-comments' => [ + 'class' => 'common\modules\comment\controllers\ManageController', + 'viewPath' => '@common/modules/comment/views/manage', + ], +], +5. В конфиге админке поменять пользователя на покупателя: +'modules' => [ + ... + 'artbox-comment' => [ + 'class' => 'common\modules\comment\Module', + 'userIdentityClass' => 'common\models\Customer', + ], +], +6. Вывод виджета: +echo CommentWidget::widget([ + 'model' => $product, +]); +7. Добавляем в нужную модель методы: +public function getComments() { + return $this->hasMany(CommentModel::className(), ['entity_id' => 'product_id'])->where(['artbox_comment.entity' => self::className(), 'artbox_comment.status' => CommentModel::STATUS_ACTIVE, 'artbox_comment.artbox_comment_pid' => NULL]); +} +/** Не обязательно для рейтинга PG ONLY **/ + public function recalculateRating() { + $average = $this->getComments()->joinWith('rating')->select(['average' => 'avg(artbox_comment_rating.value)::float'])->scalar(); + if(!$average) { + $average = 0; + } + $averageRating = $this->averageRating; + if(!empty($averageRating)) { + $averageRating->value = $average; + } else { + $averageRating = new ProductToRating(['product_id' => $this->product_id, 'value' => $average]); // Заменить модель + } + if($averageRating->save()) { + return true; + } else { + return false; + } + } + public function getAverageRating() { + return $this->hasOne(ProductToRating::className(), ['product_id' => 'product_id']); // Заменить модель + } \ No newline at end of file diff --git a/common/modules/comment/resources/artbox_comment.css b/common/modules/comment/resources/artbox_comment.css new file mode 100755 index 0000000..7ca9879 --- /dev/null +++ b/common/modules/comment/resources/artbox_comment.css @@ -0,0 +1,319 @@ +@import "https://fonts.googleapis.com/css?family=Roboto:400,700,500&subset=cyrillic-ext,latin,cyrillic,latin-ext"; + +.input_bl, .area_bl, .form-comm-wr, .user_name, .user_txt, .comment-panel, .answer-form, .comments-start input, .comments-start textarea, .submit_btn button, .input_bl label { + box-sizing: border-box +} + +.comments-border { + width: 100%; + margin-top: 25px; + margin-bottom: 27px; + height: 1px; + background: #d2d2d2 +} + +.comments-start { + width: 730px; + margin: 0 auto; + font-family: 'Roboto', sans-serif; + font-weight: 400; + color: #333 +} + +.form-comm-wr { + width: 100%; + background: #f5f5f5; + padding: 20px; + float: left +} + +.input_bl { + margin-top: 15px; + float: left +} + +.area_bl, .input_bl { + position: relative +} + +.input_bl input, .input_bl textarea, .answer-form textarea { + width: 258px; + height: 30px; + border: 1px solid #d2d2d2; + background: #fff; + outline: none !important; + border-radius: 4px; + padding-left: 10px +} + +.area_bl textarea, .answer-form textarea { + resize: none !important; + height: 140px; + width: 585px; + padding-top: 7px +} +.stars-wr_ { + width: 100%; +} +.input_bl input:focus, .input_bl textarea:focus, .answer-form textarea:focus { + box-shadow: 1px 2px 2px 0 rgba(215, 215, 215, 0.75) inset; + transition: .1s; + border: 1px solid #d2d2d2 !important; +} + +.input_bl label { + font-size: 12px; + color: #7d7d7d; + font-weight: 400; + text-transform: uppercase; + position: relative; + width: 105px; + float: left; + text-align: right; + padding-right: 10px; + margin: 9px 0 0 0; +} + +.field-commentmodel-email label { + width: 69px +} + +.submit_btn { + float: right; + margin-top: 27px +} + +.submit_btn button, .answer-form button { + padding: 0 17px; + height: 32px; + font-weight: 500; + font-size: 15px; + color: #fff; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 2px solid #799920; + background: #95ba2f; + border-radius: 4px; + cursor: pointer; + outline: none !important +} + +.submit_btn button:hover, .answer-form button:hover { + border-bottom: 2px solid #95ba2f +} + +.submit_btn button:active, .answer-form button:active { + border-bottom: 2px solid #799920; + background: #799920 +} + +.answer-form button { + float: right; + margin-top: 27px; + margin-left: 10px; +} + +.comments-wr, .comment-answer { + min-height: 64px; + position: relative; + float: left; + width: 100% +} + +.answer-form { + float: left; + width: 100% +} + +.answer-form label { + position: relative; +} + +.answer-form .required label:before { + right: -7px; +} + +.user-ico { + width: 80px; + height: 80px; + float: left; + overflow: hidden; + border-radius: 50%; + position: absolute; + top: 0; + left: 0 +} + +.user-ico img { + width: 100%; + height: 100% +} + +.comments-start .user_data { + margin-top: -2px; + font-size: 12px; + color: #636363; + border-right: none; +} + +.user_name { + margin-top: 6px; + font-weight: 700; + font-size: 15px +} + +.comments-start .user_name, .comments-start .user_txt, .comments-start .comment-panel, .comments-start .user_data, .comments-start .user_rating { + width: 100%; + float: left; + padding-left: 100px +} + +.user_txt { + margin-top: 8px; + font-size: 13px; + line-height: 18px +} + +.comment-panel { + width: 100%; + float: left; + margin-top: 11px +} + +.comment-panel a:first-child { + margin-left: 0 +} + +.btn-comm-answer, .btn-comm-delete { + font-size: 13px; + color: #799920; + border-bottom: 1px dotted #799920 +} + +.btn-comm-answer, .btn-comm-delete, .btn-comm-like, .btn-comm-dislike { + float: left; + margin-left: 10px; + text-decoration: none; + margin-top: 11px; +} + +.btn-comm-answer, .btn-comm-delete { + height: 16px; + line-height: 16px +} + +.btn-comm-answer:hover, .btn-comm-delete:hover { + text-decoration: none; + border-bottom: 0 +} + +.btn-comm-like, .btn-comm-dislike { + width: 14px; + height: 16px; + background-image: url(../images/like_dislike.png); + background-repeat: no-repeat +} + +.btn-comm-like { + background-position: 0 0 +} + +.btn-comm-like:hover { + background-position: 0 -16px +} + +.btn-comm-dislike:hover { + background-position: -14px -16px +} + +.btn-comm-dislike { + background-position: -14px 0 +} + +.btn-comm-like:active, .btn-comm-dislike:active { + opacity: .7 +} + +.comment-answer { + margin-top: 40px +} + +.comment-answer .user-ico { + left: 100px +} + +.comment-answer .user_name, .comment-answer .user_txt, .comment-answer .comment-panel, .comment-answer .user_data { + padding-left: 200px +} + +.comments-wr { + margin-top: 40px +} + +.answer-form { + margin-top: 20px +} + +.answer-form textarea { + width: 100%; + height: 90px +} + +.input_bl.has-error input, .input_bl.has-error textarea, .answer-form .has-error textarea { + box-shadow: 1px 2px 2px 0 rgba(212, 0, 0, 0.2) inset; + border: 1px solid #d2d2d2; +} + +.required.has-error label { + color: #d40000 !important; +} + +.input_bl .help-block, .answer-form .help-block { + display: none +} + +.comments-start .required label:before { + display: block; + content: "*"; + color: #d40000; + position: absolute; + top: 0; + right: 3px +} + +.comments-start ul.pagination { + list-style: none; + text-align: center; + margin-top: 40px; + width: 100%; + float: left +} + +.comments-start ul.pagination li { + display: inline +} + +.comments-start ul.pagination li.prev.disabled span { + display: none +} + +.comments-start ul.pagination li.next.disabled span { + display: none +} + +.comments-start ul.pagination li a { + padding: 3px; + color: #82a02f; + font-size: 15px; + margin: 0; + text-decoration: none; + float: none; + border: none; + backgroun-color: inherit; +} + +.comments-start ul.pagination li.active a { + color: #333; + background-color: inherit; +} \ No newline at end of file diff --git a/common/modules/comment/resources/artbox_comment.js b/common/modules/comment/resources/artbox_comment.js new file mode 100755 index 0000000..c6f9180 --- /dev/null +++ b/common/modules/comment/resources/artbox_comment.js @@ -0,0 +1,318 @@ +/** + * Artbox comment plugin + * + * @todo Translate Submit and Loading texts + */ +(function($) +{ + + $.fn.artbox_comment = function(method) + { + if(methods[method]) + { + return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); + } else if(typeof method === 'object' || !method) + { + return methods.init.apply(this, arguments); + } else + { + $.error('Method ' + method + ' does not exist on jQuery.comment'); + return false; + } + }; + + // Default settings + var defaults = { + formContainerSelector : '.artbox_form_container', + formSelector : '#artbox-comment-form', + listContainerSelector : '.artbox_list_container', + listSelector : '#artbox-comment-list', + itemContainerSelector : '.artbox_item_container', + itemInfoSelector : '.artbox_item_info', + itemToolsSelector : '.artbox_item_tools', + itemReplySelector : '.artbox_item_reply', + childrenContainerSelector : '.artbox_children_container', + childContainerSelector : '.artbox_child_container', + childInfoSelector : '.artbox_child_info', + childToolsSelector : '.artbox_child_tools', + childReplySelector : '.artbox_child_reply', + replyContainerSelector : '.artbox_comment_reply_container', + widgetContainerSelector : '.artbox_comment_container' + }; + + // Methods + var methods = { + init : function(options) + { + return this.each( + function() + { + var $commentForm = $(this); + if($commentForm.data('artbox_comment')) + { + return; + } + var settings = $.extend({}, defaults, options || {}); + $commentForm.data('artbox_comment', settings); + //Add events + var eventParams = {commentForm : $commentForm}; + $commentForm.on('beforeSubmit.artbox_comment', eventParams, beforeSubmitForm); + $(settings.listSelector).on('beforeSubmit.artbox_comment', settings.formSelector + '-reply', eventParams, reply); + $(settings.listSelector).on('click.artbox_comment', settings.itemToolsSelector + ' [data-action="reply"]', eventParams, replyInit); + $(settings.listSelector).on('click.artbox_comment', settings.itemToolsSelector + ' [data-action="reply-cancel"]', eventParams, replyCancel); + $(settings.listSelector).on('click.artbox_comment', settings.itemToolsSelector + ' [data-action="delete"]', eventParams, deleteComment); + $(settings.listSelector).on('click.artbox_comment', settings.itemToolsSelector + ' [data-action="like"]', eventParams, like); + $(settings.listSelector).on('click.artbox_comment', settings.itemToolsSelector + ' [data-action="dislike"]', eventParams, dislike); + $(settings.listSelector).on('click.artbox_comment', settings.childToolsSelector + ' [data-action="reply"]', eventParams, replyChildInit); + $(settings.listSelector).on('click.artbox_comment', settings.childToolsSelector + ' [data-action="reply-cancel"]', eventParams, replyCancel); + $(settings.listSelector).on('click.artbox_comment', settings.childToolsSelector + ' [data-action="delete"]', eventParams, deleteChild); + $(settings.listSelector).on('click.artbox_comment', settings.childToolsSelector + ' [data-action="like"]', eventParams, likeChild); + $(settings.listSelector).on('click.artbox_comment', settings.childToolsSelector + ' [data-action="dislike"]', eventParams, dislikeChild); + } + ); + }, + data : function() + { + return this.data('artbox_comment'); + } + }; + + /** + * Submit reply form + * + * @param event + */ + function reply(event) + { + /** + * @todo Implement + */ + event.preventDefault(); + var $replyForm = $(this); + var $commentForm = event.data.commentForm; + settings = $commentForm.data('artbox_comment'); + $replyForm.find(':submit').prop('disabled', true).text('Загрузка...'); + $.post( + $replyForm.attr("action"), $replyForm.serialize(), function(data) + { + if(data.status == 'success') + { + hideForm($commentForm); + $(settings.listSelector).load( + ' ' + settings.listSelector, function(data) + { + $replyForm.find(':submit').prop('disabled', false).text('Добавить комментарий'); + $replyForm.trigger("reset"); + } + ); + } + else + { + if(data.hasOwnProperty('errors')) + { + $replyForm.yiiActiveForm('updateMessages', data.errors, true); + } else + { + $replyForm.yiiActiveForm('updateAttribute', 'commentmodel-text-reply', [data.message]); + } + $replyForm.find(':submit').prop('disabled', false).text('Добавить комментарий'); + } + } + ); + return false; + } + + /** + * Submit comment form + * + * @param event + */ + function beforeSubmitForm(event) + { + event.preventDefault(); + var $commentForm = $(this), settings = $commentForm.data('artbox_comment'); + $commentForm.find(':submit').prop('disabled', true).text('Загрузка...'); + $.post( + $commentForm.attr("action"), $commentForm.serialize(), function(data) + { + if(data.status == 'success') + { + hideForm($commentForm); + $(settings.listSelector).load( + ' ' + settings.listSelector, function(data) + { + $commentForm.find(':submit').prop('disabled', false).text('Добавить комментарий'); + $commentForm.trigger("reset"); + } + ); + } + else + { + if(data.hasOwnProperty('errors')) + { + $commentForm.yiiActiveForm('updateMessages', data.errors, true); + } else + { + $commentForm.yiiActiveForm('updateAttribute', 'commentmodel-text', [data.message]); + } + $commentForm.find(':submit').prop('disabled', false).text('Добавить комментарий'); + } + } + ); + return false; + } + + /** + * Init reply form + * + * @param event + */ + function replyInit(event) + { + event.preventDefault(); + var data = event.data.commentForm.data('artbox_comment'); + var form = $(data.formSelector + '-reply'); + var button = this; + var item = $(button).parents(data.itemContainerSelector); + var item_id = $(item).data('key'); + $(form).find('#commentmodel-artbox_comment_pid-reply').val(item_id); + $(item).find(data.itemReplySelector).append(form); + } + + /** + * Init reply form + * + * @param event + */ + function replyCancel(event) + { + event.preventDefault(); + hideForm(event.data.commentForm); + } + + /** + * Init reply form + * + * @param event + */ + function deleteComment(event) + { + event.preventDefault(); + var data = event.data.commentForm.data('artbox_comment'); + hideForm(event.data.commentForm); + var button = this; + var item = $(button).parents(data.itemContainerSelector); + $.post($(button).data('url'), function(data) { + if(data.status == 'success') + { + $(item).text(data.message); + } + else + { + console.log(data.message); + } + }); + } + + /** + * Init reply form + * + * @param event + */ + function like(event) + { + event.preventDefault(); + /** + * @todo Implement + */ + } + + /** + * Init reply form + * + * @param event + */ + function dislike(event) + { + event.preventDefault(); + /** + * @todo Implement + */ + } + + /** + * Init reply form + * + * @param event + */ + function replyChildInit(event) + { + event.preventDefault(); + var data = event.data.commentForm.data('artbox_comment'); + var form = $(data.formSelector + '-reply'); + var button = this; + var item = $(button).parents(data.childContainerSelector); + var item_id = $(item).data('key'); + $(form).find('#commentmodel-artbox_comment_pid-reply').val(item_id); + $(item).find(data.childReplySelector).append(form); + } + + /** + * Init reply form + * + * @param event + */ + function deleteChild(event) + { + event.preventDefault(); + var data = event.data.commentForm.data('artbox_comment'); + hideForm(event.data.commentForm); + var button = this; + var item = $(button).parents(data.childContainerSelector); + $.post($(button).data('url'), function(data) { + if(data.status == 'success') + { + $(item).text(data.message); + } + else + { + console.log(data.message); + } + }); + } + + /** + * Init reply form + * + * @param event + */ + function likeChild(event) + { + event.preventDefault(); + /** + * @todo Implement + */ + } + + /** + * Init reply form + * + * @param event + */ + function dislikeChild(event) + { + event.preventDefault(); + /** + * @todo Implement + */ + } + + function hideForm(commentForm) + { + var data = $(commentForm).data('artbox_comment'); + var form = $(data.formSelector+'-reply'); + $(form).parents(data.widgetContainerSelector).find(data.replyContainerSelector).append(form); + form.trigger('reset'); + } + +})(window.jQuery); diff --git a/common/modules/comment/resources/delete.gif b/common/modules/comment/resources/delete.gif new file mode 100755 index 0000000..43c6ca8 Binary files /dev/null and b/common/modules/comment/resources/delete.gif differ diff --git a/common/modules/comment/resources/jquery.rateit.min.js b/common/modules/comment/resources/jquery.rateit.min.js new file mode 100755 index 0000000..08f83d8 --- /dev/null +++ b/common/modules/comment/resources/jquery.rateit.min.js @@ -0,0 +1,7 @@ +/*! RateIt | v1.0.24 / 06/14/2016 + https://github.com/gjunge/rateit.js | Twitter: @gjunge +*/ +(function(n){function t(n){var u=n.originalEvent.changedTouches,t=u[0],i="",r;switch(n.type){case"touchmove":i="mousemove";break;case"touchend":i="mouseup";break;default:return}r=document.createEvent("MouseEvent");r.initMouseEvent(i,!0,!0,window,1,t.screenX,t.screenY,t.clientX,t.clientY,!1,!1,!1,!1,0,null);t.target.dispatchEvent(r);n.preventDefault()}n.rateit={aria:{resetLabel:"reset rating",ratingLabel:"rating"}};n.fn.rateit=function(i,r){var e=1,u={},o="init",s=function(n){return n.charAt(0).toUpperCase()+n.substr(1)},f;if(this.length===0)return this;if(f=n.type(i),f=="object"||i===undefined||i===null)u=n.extend({},n.fn.rateit.defaults,i);else{if(f=="string"&&i!=="reset"&&r===undefined)return this.data("rateit"+s(i));f=="string"&&(o="setvalue")}return this.each(function(){var c=n(this),f=function(n,t){if(t!=null){var i="aria-value"+(n=="value"?"now":n),r=c.find(".rateit-range");r.attr(i)!=undefined&&r.attr(i,t)}return arguments[0]="rateit"+s(n),c.data.apply(c,arguments)},p,w,v,h,b,g,nt,l,y,k,a;if(i=="reset"){p=f("init");for(w in p)c.data(w,p[w]);f("backingfld")&&(h=n(f("backingfld")),h.val(f("value")),h.trigger("change"),h[0].min&&(h[0].min=f("min")),h[0].max&&(h[0].max=f("max")),h[0].step&&(h[0].step=f("step")));c.trigger("reset")}if(c.hasClass("rateit")||c.addClass("rateit"),v=c.css("direction")!="rtl",o=="setvalue"){if(!f("init"))throw"Can't set value before init";i!="readonly"||r!=!0||f("readonly")||(c.find(".rateit-range").unbind(),f("wired",!1));i=="value"&&(r=r==null?f("min"):Math.max(f("min"),Math.min(f("max"),r)));f("backingfld")&&(h=n(f("backingfld")),i=="value"&&h.val(r),i=="min"&&h[0].min&&(h[0].min=r),i=="max"&&h[0].max&&(h[0].max=r),i=="step"&&h[0].step&&(h[0].step=r));f(i,r)}f("init")||(f("min",isNaN(f("min"))?u.min:f("min")),f("max",isNaN(f("max"))?u.max:f("max")),f("step",f("step")||u.step),f("readonly",f("readonly")!==undefined?f("readonly"):u.readonly),f("resetable",f("resetable")!==undefined?f("resetable"):u.resetable),f("backingfld",f("backingfld")||u.backingfld),f("starwidth",f("starwidth")||u.starwidth),f("starheight",f("starheight")||u.starheight),f("value",Math.max(f("min"),Math.min(f("max"),isNaN(f("value"))?isNaN(u.value)?u.min:u.value:f("value")))),f("ispreset",f("ispreset")!==undefined?f("ispreset"):u.ispreset),f("backingfld")&&(h=n(f("backingfld")).hide(),(h.attr("disabled")||h.attr("readonly"))&&f("readonly",!0),h[0].nodeName=="INPUT"&&(h[0].type=="range"||h[0].type=="text")&&(f("min",parseInt(h.attr("min"))||f("min")),f("max",parseInt(h.attr("max"))||f("max")),f("step",parseInt(h.attr("step"))||f("step"))),h[0].nodeName=="SELECT"&&h[0].options.length>1?(f("min",isNaN(f("min"))?Number(h[0].options[0].value):f("min")),f("max",Number(h[0].options[h[0].length-1].value)),f("step",Number(h[0].options[1].value)-Number(h[0].options[0].value)),b=h.find("option[selected]"),b.length==1&&f("value",b.val())):f("value",h.val())),g=c[0].nodeName=="DIV"?"div":"span",e++,nt=' + + +
    +
    + $stock): ?> +
    +
    + isNewRecord) { + echo Html::activeHiddenInput($stock, "[{$i}]stock_id"); + } + ?> +
    +
    + field($stock, "[{$i}]quantity")->textInput(['maxlength' => true]) ?> +
    +
    + field($stock, "[{$i}]name")->textInput(['maxlength' => true]) ?> +
    +
    + +
    +
    +
    +
    + +
    +
    + + + + field($model, 'product_unit_id')->dropDownList( + ArrayHelper::map(\common\modules\product\models\ProductUnit::find()->all(), 'product_unit_id', 'name'), + [ + 'prompt' => Yii::t('product', 'Unit'), + ])->label(Yii::t('product', 'Unit')) ?> + + + all() as $group) :?> + field($model, 'options')->checkboxList( + ArrayHelper::map($group->options, 'tax_option_id', 'ValueRenderFlash'), + [ + 'multiple' => true, + 'unselect' => null, + ] + )->label($group->name);?> + + + +
    + isNewRecord ? Yii::t('product', 'Create') : Yii::t('product', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
    + + + + diff --git a/common/modules/product/views/variant/_search.php b/common/modules/product/views/variant/_search.php new file mode 100755 index 0000000..00015dc --- /dev/null +++ b/common/modules/product/views/variant/_search.php @@ -0,0 +1,31 @@ + + + diff --git a/common/modules/product/views/variant/create.php b/common/modules/product/views/variant/create.php new file mode 100755 index 0000000..1c3d2de --- /dev/null +++ b/common/modules/product/views/variant/create.php @@ -0,0 +1,23 @@ +title = Yii::t('product', 'Create Product'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Products'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + + render('_form', [ + 'model' => $model, + 'groups' => $groups, + 'stocks' => $stocks, + ]) ?> + +
    diff --git a/common/modules/product/views/variant/index.php b/common/modules/product/views/variant/index.php new file mode 100755 index 0000000..4355909 --- /dev/null +++ b/common/modules/product/views/variant/index.php @@ -0,0 +1,96 @@ +title = Yii::t('product', 'Variants'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Products'), 'url' => ['/product/manage']]; +if (!empty($product)) { + $this->params['breadcrumbs'] = [ + ['label' => Yii::t('product', 'Variants'), 'url' => ['/product/variant']], + $product->fullname + ]; +} else { + $this->params['breadcrumbs'][] = $this->title; +} +?> +
    + +

    title) ?>

    + render('_search', ['model' => $searchModel]); ?> + +

    + $product_id]), ['class' => 'btn btn-success']) ?> +

    + $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + [ + 'attribute' => 'product_id', + 'value' => 'fullname', + 'label' => Yii::t('product', 'Name'), + 'filter' => \kartik\select2\Select2::widget([ + 'model' => $searchModel, + 'attribute' => 'product_id', + 'data' => \yii\helpers\ArrayHelper::map(\common\modules\product\models\Product::find()->orderBy(['name' => 'ASC'])->all(), 'product_id', 'name'), + 'language' => 'ru', + 'options' => [ + 'placeholder' => Yii::t('product', 'Select product'), + 'multiple' => false, + ], + 'pluginOptions' => [ + 'allowClear' => true + ], + ]), + ], + 'sku', + 'price', + 'price_old', + 'stock', + + [ + 'class' => 'yii\grid\ActionColumn', + 'buttons' => [ + 'view' => function ($url, $model) + { + return Html::a ( + '', + Url::to(['view','product_id'=> $model->product_id, 'id' => $model->product_variant_id]), + [ + 'title' => "Просмотр", + ] + ); + }, + 'update' => function ($url, $model) + { + return Html::a ( + '', + Url::to(['update','product_id'=> $model->product_id, 'id' => $model->product_variant_id]), + [ + 'title' => "Редактировать", + ] + ); + }, + 'delete' => function ($url, $model) + { + + return Html::a('', Url::to(['delete','product_id'=> $model->product_id, 'id' => $model->product_variant_id]), [ + 'title' => Yii::t('yii', 'Delete'), + 'data-confirm' => Yii::t('yii', 'Are you sure to delete this item?'), + 'data-method' => 'post', + ]); + + }, + ], + ], + ], + ]); ?> +
    diff --git a/common/modules/product/views/variant/update.php b/common/modules/product/views/variant/update.php new file mode 100755 index 0000000..a146f7d --- /dev/null +++ b/common/modules/product/views/variant/update.php @@ -0,0 +1,27 @@ +title = Yii::t('product', 'Update {modelClass}: ', [ + 'modelClass' => 'Product', +]) . ' ' . $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Products'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->product->name, 'url' => ['view', 'id' => $model->product->product_id]]; +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Variants'), 'url' => Url::to(['/product/variant', 'product_id' => $model->product->product_id])]; +$this->params['breadcrumbs'][] = Yii::t('product', 'Update'); +?> +
    + +

    title) ?>

    + + render('_form', [ + 'model' => $model, + 'groups' => $groups, + 'stocks' => $stocks, + ]) ?> + +
    diff --git a/common/modules/product/views/variant/view.php b/common/modules/product/views/variant/view.php new file mode 100755 index 0000000..5eaecd8 --- /dev/null +++ b/common/modules/product/views/variant/view.php @@ -0,0 +1,42 @@ +title = $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Products'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->product->name, 'url' => ['view', 'id' => $model->product->product_id]]; +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Variants'), 'url' => ['/product/variant?product_id='. $model->product->product_id]]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + +

    + $model->product_variant_id], ['class' => 'btn btn-primary']) ?> + $model->product_variant_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('product', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

    + + $model, + 'attributes' => [ + 'product_id', + 'name', + 'fullname', + 'brand.name', + 'category.name', + 'image.imageUrl:image' + ], + ]) ?> + +
    diff --git a/common/modules/product/widgets/brandsCarouselWidget.php b/common/modules/product/widgets/brandsCarouselWidget.php new file mode 100755 index 0000000..1263a09 --- /dev/null +++ b/common/modules/product/widgets/brandsCarouselWidget.php @@ -0,0 +1,21 @@ +all(); + return $this->render('brandsCarousel', [ + 'brands' => $brands, + ]); + } +} \ No newline at end of file diff --git a/common/modules/product/widgets/catalogSubmenuWidget.php b/common/modules/product/widgets/catalogSubmenuWidget.php new file mode 100755 index 0000000..ef9388f --- /dev/null +++ b/common/modules/product/widgets/catalogSubmenuWidget.php @@ -0,0 +1,36 @@ +root_id); + + $categories = $rootCategory->getAllChildren(2, [], 'categoryName')->all(); + $populary = []; + foreach($categories as $category) { + if ($category->populary) { + $populary[] = $category; + } + } + + return $this->render('submenu', [ + 'rootCategory' => $rootCategory, + 'rootClass' => $this->rootClass, + 'populary' => $populary, + 'items' => $rootCategory->buildTree($categories, $rootCategory->category_id) + ]); + } +} \ No newline at end of file diff --git a/common/modules/product/widgets/lastProducts.php b/common/modules/product/widgets/lastProducts.php new file mode 100755 index 0000000..ab00838 --- /dev/null +++ b/common/modules/product/widgets/lastProducts.php @@ -0,0 +1,22 @@ +render('products_block', [ + 'title' => \Yii::t('product', 'Вы недавно просматривали'), + 'class' => 'last-products', + 'products' => ProductHelper::getLastProducts(true), + ]); + } +} \ No newline at end of file diff --git a/common/modules/product/widgets/similarProducts.php b/common/modules/product/widgets/similarProducts.php new file mode 100755 index 0000000..aebd754 --- /dev/null +++ b/common/modules/product/widgets/similarProducts.php @@ -0,0 +1,35 @@ +product, $this->count); + + if (!$this->title) { + $this->title = Yii::t('product', 'Similar products'); + } + + return $this->render('products_block', [ + 'title' => $this->title, + 'class' => 'similar-products', + 'products' => $products, + ]); + } +} \ No newline at end of file diff --git a/common/modules/product/widgets/specialProducts.php b/common/modules/product/widgets/specialProducts.php new file mode 100755 index 0000000..2a9bb15 --- /dev/null +++ b/common/modules/product/widgets/specialProducts.php @@ -0,0 +1,47 @@ +type, $this->count, $this->sort); + + if (!$this->title) { + switch($this->type) { + case 'top': + $this->title = Yii::t('product', 'Top products'); + break; + case 'promo': + $this->title = Yii::t('product', 'Promo products'); + break; + case 'new': + $this->title = Yii::t('product', 'New products'); + break; + } + } + + return $this->render('products_block', [ + 'title' => $this->title, + 'class' => $this->type, + 'products' => $products, + ]); + } +} \ No newline at end of file diff --git a/common/modules/product/widgets/views/brandsCarousel.php b/common/modules/product/widgets/views/brandsCarousel.php new file mode 100755 index 0000000..0d76762 --- /dev/null +++ b/common/modules/product/widgets/views/brandsCarousel.php @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/common/modules/product/widgets/views/product_smart.php b/common/modules/product/widgets/views/product_smart.php new file mode 100755 index 0000000..471cdaf --- /dev/null +++ b/common/modules/product/widgets/views/product_smart.php @@ -0,0 +1,70 @@ + +
    +
    +
    +
    '; + } else if($class == 'new') { + print '
    '; + } else if($class == 'promo'){ + print '
    Акция
    '; + } + ?> + + +
    + +
    + \ No newline at end of file diff --git a/common/modules/product/widgets/views/products_block.php b/common/modules/product/widgets/views/products_block.php new file mode 100755 index 0000000..0652a2e --- /dev/null +++ b/common/modules/product/widgets/views/products_block.php @@ -0,0 +1,28 @@ + + + + + + + +
    + + render('product_smart', [ + 'product' => $product, + 'class' => $class + ]);?> + +
    + + + + + + + diff --git a/common/modules/product/widgets/views/submenu.php b/common/modules/product/widgets/views/submenu.php new file mode 100755 index 0000000..a20f588 --- /dev/null +++ b/common/modules/product/widgets/views/submenu.php @@ -0,0 +1,50 @@ + diff --git a/common/modules/rubrication/Module.php b/common/modules/rubrication/Module.php new file mode 100755 index 0000000..dd3159a --- /dev/null +++ b/common/modules/rubrication/Module.php @@ -0,0 +1,26 @@ +keyNameId === null) { + $primaryKey = $owner->primaryKey(); + if (!isset($primaryKey[0])) { + throw new Exception('"' . $owner->className() . '" must have a primary key.'); + } + $this->keyNameId = $primaryKey[0]; + } + } + + /* + * Inicialize behavior (read and prepare params) + */ + public function init() { + if (empty($this->valueModel)) { + $this->valueModel = TaxValueString::className(); + } + if (empty($this->valuePKey)) { + $vm = $this->valueModel; + $primaryKey = $vm::primaryKey(); + if (!isset($primaryKey[0])) { + throw new Exception('"' . $this->valueModel . '" must have a primary key.'); + } + if (count($primaryKey) > 1) { + throw new Exception('"' . $this->valueModel . '" is contains multiple keys.'); + } + $this->valuePKey = $primaryKey[0]; + } + } + + /* + * Events for auto-drive default value + */ + public function events() { + return [ + ActiveRecord::EVENT_AFTER_INSERT => 'afterInsert', + ActiveRecord::EVENT_AFTER_UPDATE => 'beforeUpdate', + ActiveRecord::EVENT_BEFORE_DELETE => 'beforeDelete', + ]; + } + + public function getAutoValue() { + return $this->owner->hasOne($this->valueModel, [$this->valuePKey => $this->keyNameValue]); + } + + public function afterInsert() { + /** @var ActiveRecord $valueModel */ + $valueModel = new $this->valueModel; + foreach ($this->valueFields as $key => $field) { + $valueModel->setAttribute($field, $this->$key); + } + $valueModel->setAttribute($this->valueOptionId, $this->owner->getAttribute($this->keyNameId)); + $valueModel->save(); + $this->owner->setAttribute($this->keyNameValue, $valueModel->getAttribute($this->valuePKey)); + $this->owner->{$this->slug['slugKeyName']} = $this->slugify($valueModel->{$this->slug['valueKeyName']}); + $this->owner->save(false); + } + + public function beforeUpdate() { + if ($this->owner->getIsNewRecord()) { + throw new NotSupportedException('Method "' . $this->owner->className() . '::insert" is not supported for inserting new entitys.'); + } + + if (!$this->owner->getAttribute($this->keyNameValue)) { + return; + } + + /** @var ActiveRecord $valueModel */ + $valueModelName = $this->valueModel; + $valueModel = $valueModelName::findOne($this->owner->getAttribute($this->keyNameValue)); + + $isave = false; + foreach ($this->valueFields as $key => $field) { + if ($valueModel->getAttribute($field) == $this->$key) { + continue; + } + $isave = true; + $valueModel->setAttribute($field, $this->$key); + } + if ($isave) { + $valueModel->setAttribute($this->valueOptionId, $this->owner->getAttribute($this->keyNameId)); + $valueModel->save(); + if (!empty($this->slug) && empty($this->owner->{$this->slug['slugKeyName']})) { + $this->owner->{$this->slug['slugKeyName']} = $this->slugify($valueModel->{$this->slug['valueKeyName']}); + } + } + } + + public function beforeDelete() { + /** @var ActiveRecord $valueModel */ + $valueModelName = $this->valueModel; + $valueModelName::deleteAll([ + $this->valueOptionId => $this->owner->getAttribute($this->keyNameId) + ]); + } + + private function slugify( $slug ) + { + return Inflector::slug( TransliteratorHelper::process( $slug ), '-', true ); + } + + /** + * @inheritdoc + */ + public function canSetProperty($key, $checkVars = true) + { + return array_key_exists($key, $this->valueFields) ? + true : parent::canSetProperty($key, $checkVars = true); + } + + /** + * @inheritdoc + */ + public function __set($key, $value) { + if (isset($this->valueFields[$key])) { + $this->values[$key] = $value; + } + } + + /** + * @inheritdoc + */ + public function __get($key) { + return $this->_getValue($key); + } + + public function _getValue($key) { + if (isset($this->values[$key])) { + return $this->values[$key]; + } + } +} \ No newline at end of file diff --git a/common/modules/rubrication/controllers/DefaultController.php b/common/modules/rubrication/controllers/DefaultController.php new file mode 100755 index 0000000..cbc303c --- /dev/null +++ b/common/modules/rubrication/controllers/DefaultController.php @@ -0,0 +1,20 @@ +render('index'); + } +} diff --git a/common/modules/rubrication/controllers/TaxGroupController.php b/common/modules/rubrication/controllers/TaxGroupController.php new file mode 100755 index 0000000..30c37b9 --- /dev/null +++ b/common/modules/rubrication/controllers/TaxGroupController.php @@ -0,0 +1,158 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all TaxGroup models. + * @param $level integer + * @return mixed + */ + public function actionIndex($level) + { + $dataProvider = new ActiveDataProvider([ + 'query' => TaxGroup::find()->where(['level' => $level]), + ]); + + return $this->render('index', [ + 'dataProvider' => $dataProvider, + 'level' => $level + ]); + } + + /** + * Displays a single TaxGroup model. + * @param integer $id + * @return mixed + */ + public function actionView($level,$id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new TaxGroup model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @param $level integer + * @return mixed + */ + public function actionCreate($level) + { + $model = new TaxGroup(); + + if ($model->load(Yii::$app->request->post()) && $model->validate()) { + $model->level = $level; + $model->save(); + return $this->redirect(['index', 'level' => $level]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing TaxGroup model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param $level integer + * @param integer $id + * @return mixed + */ + public function actionUpdate($level,$id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['index', 'level' => $level]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing TaxGroup model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param $level integer + * @param integer $id + * @return mixed + */ + public function actionDelete($level,$id) + { + $this->findModel($id)->delete(); + return $this->redirect(['index', 'level' => $level]); + } + + /* + * Group-relations + */ + public function actionRelation($id, $relations = ['tax_option_to_group', 'tax_option_to_option']) { + $group = $this->findModel($id); + $items = []; + + foreach($relations as $relation) { + $rows = $group->getRelations($relation)->all(); + $items = array_merge($items, $rows); + } + + return $this->render('relations', [ + 'items' => $items, + 'group' => $group, + ]); + } + + /* + * Rebuilp MP-params for group options + */ + public function actionRebuild($id) { + TaxOption::find()->rebuildMP($id); + + return $this->redirect(['index']); + } + + /** + * Finds the TaxGroup model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return TaxGroup the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = TaxGroup::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/common/modules/rubrication/controllers/TaxOptionController.php b/common/modules/rubrication/controllers/TaxOptionController.php new file mode 100755 index 0000000..12bf38a --- /dev/null +++ b/common/modules/rubrication/controllers/TaxOptionController.php @@ -0,0 +1,193 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all TaxOption models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new TaxOptionSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + $group = TaxGroup::findOne(Yii::$app->request->queryParams['group']); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + 'group' => $group, + ]); + } + + /** + * Displays a single TaxOption model. + * @param string $id + * @return mixed + */ + public function actionView($id) + { + $model = $this->findModel($id); + $group = TaxGroup::findOne($model->tax_group_id); + return $this->render('view', [ + 'model' => $model, + 'group' => $group, + ]); + } + + /** + * Creates a new TaxOption model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new TaxOption(); + $group = TaxGroup::findOne(Yii::$app->request->queryParams['group']); + $valueModelName = $this->getValueModelName($group); + $valueModel = new $valueModelName; + + if ($model->load(Yii::$app->request->post())) { + if ( ($image = UploadedFile::getInstance($model, 'image')) ) { + $model->image = $image->name; + } + if ($model->save() && $image) { + + $imgDir = Yii::getAlias('@storage/tax_option/'); + + if(!is_dir($imgDir)) { + mkdir($imgDir, 0755, true); + } + + $image->saveAs(Yii::getAlias('@storage/tax_option/' . $image->name)); + } + + $valueModel->tax_option_id = $model->tax_option_id; + $valueModel->value = $model->name; + $valueModel->save(); + + $model->default_value = $valueModel->tax_value_id; + $model->save(); + + return is_null(Yii::$app->request->post('create_and_new')) ? $this->redirect(['view', 'id' => $model->tax_option_id]) : $this->redirect(array_merge(['create'], Yii::$app->request->queryParams)); + } else { + $model->tax_group_id = $group->tax_group_id; + if (!empty(Yii::$app->request->queryParams['parent'])) { + $model->parent_id = Yii::$app->request->queryParams['parent']; + } + return $this->render('create', [ + 'model' => $model, + 'group' => $group, + 'valueModel' => $valueModel, + ]); + } + } + + /** + * Updates an existing TaxOption model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param string $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + $group = TaxGroup::findOne($model->tax_group_id); + + + if ($model->load(Yii::$app->request->post())) { + + + if ( ($image = UploadedFile::getInstance($model, 'image')) ) { + $model->image = $image->name; + } + if ($model->save() && $image) { + + $imgDir = Yii::getAlias('@storage/tax_option/'); + + if(!is_dir($imgDir)) { + mkdir($imgDir, 0755, true); + } + + $image->saveAs(Yii::getAlias('@storage/tax_option/' . $image->name)); + } + + TaxOption::find()->rebuildMP($model->tax_group_id); + + return $this->redirect(['view', 'id' => $model->tax_option_id]); + } else { + return $this->render('update', [ + 'model' => $model, + 'group' => $group + ]); + } + } + + /** + * Deletes an existing TaxOption model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param string $id + * @return mixed + */ + public function actionDelete($id) + { + $model = $this->findModel($id); + $group_id = $model->tax_group_id; + + $model->delete(); + + return $this->redirect(['index', 'group' => $group_id]); + } + + /** + * Finds the TaxOption model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param string $id + * @return TaxOption the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = TaxOption::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } + + protected function getValueModelName($group) { + $valueClass = '\common\modules\rubrication\models\TaxValue'. ucfirst($group->module); + return class_exists($valueClass) ? $valueClass : FALSE; + } +} diff --git a/common/modules/rubrication/helpers/RubricationHelper.php b/common/modules/rubrication/helpers/RubricationHelper.php new file mode 100755 index 0000000..4044373 --- /dev/null +++ b/common/modules/rubrication/helpers/RubricationHelper.php @@ -0,0 +1,51 @@ + Yii::t('order', 'Invisible'), + 1 => Yii::t('order', 'Active'), + ]; + } + + /** + * @inheritdoc + * Returns sort-interval of appropriate options and others + * @return array. + */ + static public function SortArray($low = 0, $high = 100) { + return range($low, $high); + } + + static public function OptionTypes() { + if (!is_null(self::$types)) { + return self::$types; + } + + $module = \Yii::$app->getModule('rubrication'); + + if (!is_array($module->types)) + return []; + + return $module->types; + + } + + public function checkboxList($items, $options = []) + { + $this->adjustLabelFor($options); + $this->parts['{input}'] = Html::activeCheckboxList($this->model, $this->attribute, $items, $options); + + return $this; + } +} \ No newline at end of file diff --git a/common/modules/rubrication/models/TaxGroup.php b/common/modules/rubrication/models/TaxGroup.php new file mode 100755 index 0000000..096eaa7 --- /dev/null +++ b/common/modules/rubrication/models/TaxGroup.php @@ -0,0 +1,145 @@ + [ + 'class' => 'common\behaviors\Slug', + 'in_attribute' => 'name', + 'out_attribute' => 'alias', + 'translit' => true + ], + ]; + } + + /** + * @inheritdoc + */ + public static function tableName() + { + return 'tax_group'; + } + + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['name', 'module'], 'required'], + [['description', 'settings'], 'string'], + [['hierarchical', 'is_filter', 'display','is_menu'], 'boolean'], + [['level', 'sort'], 'integer'], + [['alias', 'module'], 'string', 'max' => 50], + [['name'], 'string', 'max' => 255], + [['categories'], 'safe'] + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'tax_group_id' => 'Tax Group ID', + 'alias' => 'Alias', + 'name' => 'Name', + 'description' => 'Description', + 'module' => 'Module', + 'hierarchical' => 'Hierarchical', +// 'settings' => 'Settings', + 'is_filter' => 'Use in filter', + 'sort' => 'Sort', + 'display' => 'Display', + 'is_menu' => 'Отображать в меню', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxGroupToGroups() + { + return $this->hasMany(TaxGroupToGroup::className(), ['tax_group1_id' => 'tax_group_id'])->inverseOf('taxGroup1'); + } + + public function getCategories() + { + return $this->hasMany(Category::className(), ['category_id' => 'category_id']) + ->viaTable('tax_group_to_category', ['tax_group_id' => 'tax_group_id']); + } + + public function setCategories($values) + { + $this->categories = $values; + } + + public function afterSave($insert, $changedAttributes) + { + + $this->unlinkAll('categories',true); + $categories = Category::findAll($this->categories); + foreach($categories as $category){ + $this->link('categories', $category); + } + + + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getOptions() { + return $this->getTaxOptions(); + } + public function getTaxOptions() + { + return $this->hasMany(TaxOption::className(), ['tax_group_id' => 'tax_group_id'])->inverseOf('taxGroup'); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxOptionToGroups() + { + return $this->hasMany(TaxOptionToGroup::className(), ['tax_group_id' => 'tax_group_id'])->inverseOf('taxGroup'); + } + + public function getValueModelName($full_path = true) { + $valueClass = 'TaxValue'. ucfirst($this->module); + $fullClass = '\common\modules\rubrication\models\\'. $valueClass; + return class_exists($fullClass) ? $full_path ? $fullClass : $valueClass : FALSE; + } +} diff --git a/common/modules/rubrication/models/TaxGroupToCategory.php b/common/modules/rubrication/models/TaxGroupToCategory.php new file mode 100755 index 0000000..481b582 --- /dev/null +++ b/common/modules/rubrication/models/TaxGroupToCategory.php @@ -0,0 +1,68 @@ + true, 'targetClass' => Category::className(), 'targetAttribute' => ['category_id' => 'category_id']], + [['tax_group_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxGroup::className(), 'targetAttribute' => ['tax_group_id' => 'tax_group_id']], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'tax_group_to_category_id' => 'Tax Group To Category ID', + 'tax_group_id' => 'Tax Group ID', + 'category_id' => 'Category ID', + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getCategory() + { + return $this->hasOne(Category::className(), ['category_id' => 'category_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxGroup() + { + return $this->hasOne(TaxGroup::className(), ['tax_group_id' => 'tax_group_id']); + } +} diff --git a/common/modules/rubrication/models/TaxGroupToGroup.php b/common/modules/rubrication/models/TaxGroupToGroup.php new file mode 100755 index 0000000..b621239 --- /dev/null +++ b/common/modules/rubrication/models/TaxGroupToGroup.php @@ -0,0 +1,69 @@ + 50] + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'tax_group1_id' => Yii::t('app', 'Tax Group1 ID'), + 'tax_group2_id' => Yii::t('app', 'Tax Group2 ID'), + 'alias' => Yii::t('app', 'Alias'), + 'sort' => Yii::t('app', 'Sort'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxGroup1() + { + return $this->hasOne(TaxGroup::className(), ['tax_group_id' => 'tax_group1_id']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxGroup2() + { + return $this->hasOne(TaxGroup::className(), ['tax_group_id' => 'tax_group2_id']); + } +} diff --git a/common/modules/rubrication/models/TaxOption.php b/common/modules/rubrication/models/TaxOption.php new file mode 100755 index 0000000..d977fd9 --- /dev/null +++ b/common/modules/rubrication/models/TaxOption.php @@ -0,0 +1,221 @@ + [ + 'class' => ArtboxTreeBehavior::className(), + 'keyNameGroup' => 'tax_group_id', + ], + 'slug' => [ + 'class' => 'common\behaviors\Slug', + 'in_attribute' => 'name', + 'out_attribute' => 'alias', + 'translit' => true + ], + + ]; + } + + /** + * @inheritdoc + */ + public static function tableName() + { + return '{{%tax_option}}'; + } + + /** + * @inheritdoc + */ + public function rules() + { + return [ + [['tax_group_id','name'], 'required'], + [['tax_group_id', 'parent_id', 'sort', 'default_value'], 'integer'], + [['image','alias', 'value'], 'string', 'max' => 255], + [['tax_group_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxGroup::className(), 'targetAttribute' => ['tax_group_id' => 'tax_group_id']], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'tax_option_id' => Yii::t('app', 'Tax Option ID'), + 'tax_group_id' => Yii::t('app', 'Tax Group ID'), + 'parent_id' => Yii::t('app', 'Parent ID'), + 'alias' => Yii::t('app', 'Alias'), + 'sort' => Yii::t('app', 'Sort'), + 'default_value' => Yii::t('app', 'Default Value'), + 'image' => Yii::t('product', 'Image'), + ]; + } + + public static function find() { + return new TaxOptionQuery(get_called_class()); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxEntityRelations() + { + return $this->hasMany(TaxEntityRelation::className(), ['tax_option_id' => 'tax_option_id'])->inverseOf('taxOption'); + } + + + /** + * @return \yii\db\ActiveQuery + */ + public function getGroup() + { + return $this->getTaxGroup(); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxGroup() + { + return $this->hasOne(TaxGroup::className(), ['tax_group_id' => 'tax_group_id'])->inverseOf('taxOptions'); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxOptions() + { + return $this->hasMany(TaxOption::className(), ['parent_id' => 'tax_option_id'])->inverseOf('parent'); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxOptionToGroups() + { + return $this->hasMany(TaxOptionToGroup::className(), ['tax_option_id' => 'tax_option_id'])->inverseOf('taxOption'); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxOptionToOptions() + { + return $this->hasMany(TaxOptionToOption::className(), ['tax_option1_id' => 'tax_option_id'])->inverseOf('taxOption1'); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxOptionToOptions0() + { + return $this->hasMany(TaxOptionToOption::className(), ['tax_option2_id' => 'tax_option_id'])->inverseOf('taxOption2'); + } + + + public function getTaxValueString(){ + return $this->name; + } + + + /** + */ + public function getValue() + { + return $this->name; + } + public function setValue($value){ + return $this->name = $value; + } + /** + */ + public function getValueRenderFlash() + { + return $this->name; + } + + /** + */ + public function getValueRenderHTML() + { + return $this->name; + } + + + + /** + * @return \yii\db\ActiveQuery + */ + public function getValues() + { + if ($valueClass = $this->getValueModelName()) + return $this->hasMany($valueClass, ['tax_option_id' => 'tax_option_id'])->inverseOf('taxOption')->cascadeOnDelete(); + } + + public function beforeSave($insert) + { + if (parent::beforeSave($insert)) { + + if (empty($this->parent_id)) + $this->parent_id = 0; + + + + return true; + } + return false; + } + + public function getImageFile() { + return empty($this->image) ? null : Yii::getAlias('@imagesDir/tax_option/'. $this->image); + } + + public function getImageUrl() + { + return empty($this->image) ? null : Yii::getAlias('@imagesUrl/tax_option/' . $this->image); + } +} diff --git a/common/modules/rubrication/models/TaxOptionQuery.php b/common/modules/rubrication/models/TaxOptionQuery.php new file mode 100755 index 0000000..323c24c --- /dev/null +++ b/common/modules/rubrication/models/TaxOptionQuery.php @@ -0,0 +1,39 @@ +andWhere('[[status]]=1'); + }*/ + + /** + * @inheritdoc + * @return TaxOption[]|array + */ + public function all($db = null) + { + + return parent::all($db); + } + + /** + * @inheritdoc + * @return TaxOption|array|null + */ + public function one($db = null) + { + + return parent::one($db); + } +} diff --git a/common/modules/rubrication/models/TaxOptionRelation.php b/common/modules/rubrication/models/TaxOptionRelation.php new file mode 100755 index 0000000..c5390be --- /dev/null +++ b/common/modules/rubrication/models/TaxOptionRelation.php @@ -0,0 +1,50 @@ + 50] + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'tax_option1_id' => Yii::t('product', 'Tax Option1 ID'), + 'tax_option2_id' => Yii::t('product', 'Tax Option2 ID'), + 'alias' => Yii::t('product', 'Alias'), + 'sort' => Yii::t('product', 'Sort'), + ]; + } +} diff --git a/common/modules/rubrication/models/TaxOptionSearch.php b/common/modules/rubrication/models/TaxOptionSearch.php new file mode 100755 index 0000000..9cdddb4 --- /dev/null +++ b/common/modules/rubrication/models/TaxOptionSearch.php @@ -0,0 +1,76 @@ +tax_group_id = intval($params['group']); + unset($params['group']); + } + + $dataProvider = new ActiveDataProvider([ + 'query' => $query, + ]); + + $this->load($params); + +// if (!$this->validate()) { +// return $dataProvider; +// } + + // grid filtering conditions + $query->andFilterWhere([ + 'tax_option_id' => $this->tax_option_id, + 'tax_group_id' => $this->tax_group_id, + 'parent_id' => $this->parent_id, + 'sort' => $this->sort, + ]); + + $query->andFilterWhere(['like', 'alias', $this->alias]); + $query->andFilterWhere(['like', 'tax_value_string.value', $this->default_value]); + + $query->orderBy(['path_int' => SORT_ASC, 'depth' => SORT_ASC, 'sort' => SORT_ASC]); + + return $dataProvider; + } +} diff --git a/common/modules/rubrication/models/TaxValueFloat.php b/common/modules/rubrication/models/TaxValueFloat.php new file mode 100755 index 0000000..a8d76e6 --- /dev/null +++ b/common/modules/rubrication/models/TaxValueFloat.php @@ -0,0 +1,58 @@ + true, 'targetClass' => TaxOption::className(), 'targetAttribute' => ['tax_option_id' => 'tax_option_id']], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'tax_value_id' => Yii::t('app', 'Tax Value ID'), + 'tax_option_id' => Yii::t('app', 'Tax Option ID'), + 'value' => Yii::t('app', 'Value'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxOption() + { + return $this->hasOne(TaxOption::className(), ['tax_option_id' => 'tax_option_id'])->inverseOf('taxValues'); + } +} diff --git a/common/modules/rubrication/models/TaxValueInt.php b/common/modules/rubrication/models/TaxValueInt.php new file mode 100755 index 0000000..89406f2 --- /dev/null +++ b/common/modules/rubrication/models/TaxValueInt.php @@ -0,0 +1,57 @@ + true, 'targetClass' => TaxOption::className(), 'targetAttribute' => ['tax_option_id' => 'tax_option_id']], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'tax_value_id' => Yii::t('app', 'Tax Value ID'), + 'tax_option_id' => Yii::t('app', 'Tax Option ID'), + 'value' => Yii::t('app', 'Value'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxOption() + { + return $this->hasOne(TaxOption::className(), ['tax_option_id' => 'tax_option_id'])->inverseOf('taxValues'); + } +} diff --git a/common/modules/rubrication/models/TaxValueLink.php b/common/modules/rubrication/models/TaxValueLink.php new file mode 100755 index 0000000..c6c3d90 --- /dev/null +++ b/common/modules/rubrication/models/TaxValueLink.php @@ -0,0 +1,69 @@ + 150], + [['link'], 'string', 'max' => 255], + [['tax_option_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxOption::className(), 'targetAttribute' => ['tax_option_id' => 'tax_option_id']], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'tax_value_id' => Yii::t('app', 'Tax Value ID'), + 'tax_option_id' => Yii::t('app', 'Tax Option ID'), + 'name' => Yii::t('app', 'Name'), + 'link' => Yii::t('app', 'Link'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxOption() + { + return $this->hasOne(TaxOption::className(), ['tax_option_id' => 'tax_option_id'])->inverseOf('taxValueLinks'); + } + + public static function getValueRenderFlash($value) { + return $value->name; + } + + public static function getValueRenderHTML($value) { + return Html::a($value->name, $value->link); + } +} diff --git a/common/modules/rubrication/models/TaxValueString.php b/common/modules/rubrication/models/TaxValueString.php new file mode 100755 index 0000000..881110b --- /dev/null +++ b/common/modules/rubrication/models/TaxValueString.php @@ -0,0 +1,58 @@ + 255], + [['tax_option_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxOption::className(), 'targetAttribute' => ['tax_option_id' => 'tax_option_id']], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'tax_value_id' => Yii::t('rubrication', 'Tax Value ID'), + 'tax_option_id' => Yii::t('rubrication', 'Tax Option ID'), + 'value' => Yii::t('rubrication', 'Value'), + ]; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getTaxOption() + { + return $this->hasOne(TaxOption::className(), ['tax_option_id' => 'tax_option_id']); + } +} diff --git a/common/modules/rubrication/views/default/index.php b/common/modules/rubrication/views/default/index.php new file mode 100755 index 0000000..d9e8d45 --- /dev/null +++ b/common/modules/rubrication/views/default/index.php @@ -0,0 +1,12 @@ +
    +

    context->action->uniqueId ?>

    +

    + This is the view content for action "context->action->id ?>". + The action belongs to the controller "context) ?>" + in the "context->module->id ?>" module. +

    +

    + You may customize this page by editing the following file:
    + +

    +
    diff --git a/common/modules/rubrication/views/tax-group/_form.php b/common/modules/rubrication/views/tax-group/_form.php new file mode 100755 index 0000000..4c3a784 --- /dev/null +++ b/common/modules/rubrication/views/tax-group/_form.php @@ -0,0 +1,51 @@ + + +
    + + ['enctype' => 'multipart/form-data']]); ?> + + field($model, 'name')->textInput(['maxlength' => true]) ?> + + field($model, 'alias')->textInput(['maxlength' => true]) ?> + + field($model, 'description')->textarea(['rows' => 6]) ?> + + field($model, 'module')->dropDownList(RubricationHelper::OptionTypes(), [ + 'prompt' => Yii::t('rubrication', 'Select module'), + ]) ?> + + field($model, 'categories')->dropDownList( + ArtboxTreeHelper::treeMap(ProductHelper::getCategories(), 'category_id', 'name'), + [ + 'multiple' => true + ] + )->label('Use in the following categories') ?> + + field($model, 'hierarchical')->checkbox()*/ ?> + + field($model, 'is_filter')->checkbox() ?> + + field($model, 'display')->checkbox() ?> + + field($model, 'is_menu')->checkbox() ?> + + field($model, 'sort')->textInput() ?> + +
    + isNewRecord ? Yii::t('rubrication', 'Create') : Yii::t('rubrication', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
    + + + +
    diff --git a/common/modules/rubrication/views/tax-group/create.php b/common/modules/rubrication/views/tax-group/create.php new file mode 100755 index 0000000..ddcc890 --- /dev/null +++ b/common/modules/rubrication/views/tax-group/create.php @@ -0,0 +1,21 @@ +title = Yii::t('rubrication', 'Create Tax Group'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', 'Tax Groups'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + + render('_form', [ + 'model' => $model, + ]) ?> + +
    diff --git a/common/modules/rubrication/views/tax-group/index.php b/common/modules/rubrication/views/tax-group/index.php new file mode 100755 index 0000000..705eff0 --- /dev/null +++ b/common/modules/rubrication/views/tax-group/index.php @@ -0,0 +1,76 @@ +title = Yii::t('rubrication', 'Groups'); +$this->params['breadcrumbs'][] = $this->title; +?> + +
    + +

    title) ?>

    +

    + $level]), ['class' => 'btn btn-success']) ?> +

    + + $dataProvider, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'name', + 'alias', + 'description:ntext', + 'module', + 'hierarchical:boolean', + 'is_filter:boolean', + // 'settings:ntext', + + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{update} {options} {relations} {delete} {rebuild}', + 'buttons' => [ + 'options' => function ($url, $model) { + return Html::a('', $url, [ + 'title' => Yii::t('rubrication', 'Options'), + ]); + }, + 'relations' => function ($url, $model) { + return Html::a('', $url, [ + 'title' => Yii::t('rubrication', 'Relations'), + ]); + }, + 'rebuild' => function ($url, $model) { + return Html::a('', $url, [ + 'title' => Yii::t('rubrication', 'Rebuild cache'), + ]); + } + ], + 'urlCreator' => function ($action, $model, $key, $index) use ($level) { + if ($action === 'options') { + $url ='/admin/rubrication/tax-option?group='.$model->tax_group_id; + return $url; + } elseif ($action === 'relations') { + $url ='/admin/rubrication/tax-group/relation&id='.$model->tax_group_id; + return $url; + } elseif ($action === 'update') { + $url =Url::to(['/rubrication/tax-group/update', 'level'=> $level,'id' =>$model->tax_group_id]); + return $url; + } elseif ($action === 'delete') { + $url =Url::to(['/rubrication/tax-group/delete', 'level'=> $level,'id' =>$model->tax_group_id]); + return $url; + } elseif ($action === 'rebuild') { + $url ='/admin/rubrication/tax-group/rebuild?id='.$model->tax_group_id; + return $url; + } + } + ], + ], + ]); ?> +
    + diff --git a/common/modules/rubrication/views/tax-group/relations.php b/common/modules/rubrication/views/tax-group/relations.php new file mode 100755 index 0000000..c65a58d --- /dev/null +++ b/common/modules/rubrication/views/tax-group/relations.php @@ -0,0 +1,58 @@ +title = Yii::t('relation', 'Relation for Group "{group}"', ['group' => $group->name]); +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', 'Tax Groups'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + + + 'btn btn-success']) ?> + + + $items, + 'sort' => [ + 'attributes' => ['name', 'alias', 'entity1_label', 'entity2_label'], + ], + 'pagination' => [ + 'pageSize' => 10, + ], + ]); + ?> + + $dataProvider, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + 'name', + 'alias', + 'entity1_label', + 'entity2_label', + /*[ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{view}', + 'buttons' => [ + 'view' => function ($url, $model) { + return Html::a('', $url, [ + 'title' => Yii::t('relation', 'View pars'), + ]); + }, + ], + 'urlCreator' => function ($action, $model, $key, $index) { + if ($action === 'view') { + $url ='/admin/relation/manage/pars?relation='. $model['key']; + return $url; + } + } + ],*/ + ], + ]); ?> +
    diff --git a/common/modules/rubrication/views/tax-group/update.php b/common/modules/rubrication/views/tax-group/update.php new file mode 100755 index 0000000..8414ea0 --- /dev/null +++ b/common/modules/rubrication/views/tax-group/update.php @@ -0,0 +1,23 @@ +title = Yii::t('rubrication', 'Update {modelClass}: ', [ + 'modelClass' => 'Tax Group', +]) . ' ' . $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', 'Groups'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->tax_group_id]]; +$this->params['breadcrumbs'][] = Yii::t('rubrication', 'Update'); +?> +
    + +

    title) ?>

    + + render('_form', [ + 'model' => $model, + ]) ?> + +
    diff --git a/common/modules/rubrication/views/tax-group/view.php b/common/modules/rubrication/views/tax-group/view.php new file mode 100755 index 0000000..44e1691 --- /dev/null +++ b/common/modules/rubrication/views/tax-group/view.php @@ -0,0 +1,43 @@ +title = $model->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', 'Tax Groups'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + +

    + $model->tax_group_id], ['class' => 'btn btn-primary']) ?> + $model->tax_group_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('rubrication', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> + tax_group_id], ['class' => 'btn btn-success']) ?> +

    + + $model, + 'attributes' => [ + 'tax_group_id', + 'alias', + 'name', + 'description:ntext', + 'module', + 'hierarchical:boolean', + 'is_filter:boolean', + 'settings:ntext', + ], + ]) ?> + +
    diff --git a/common/modules/rubrication/views/tax-option/_form.php b/common/modules/rubrication/views/tax-option/_form.php new file mode 100755 index 0000000..f8084d5 --- /dev/null +++ b/common/modules/rubrication/views/tax-option/_form.php @@ -0,0 +1,80 @@ + + +
    + + ['enctype' => 'multipart/form-data']]); ?> + tax_group_id)) :?> + field($model, 'tax_group_id')->dropDownList( + ArrayHelper::map(TaxOption::find()->all(), 'tax_group_id', 'name'), + [ + 'prompt' => Yii::t('rubrication', 'Select group'), + ] + ) ?> + + field($model, 'tax_group_id')->hiddenInput()->label('') ?> + + + + field($model, 'name')->textInput(['maxlength' => true]) ?> +module .'.php')?> + + field($model, 'alias')->textInput(['maxlength' => true]) ?> + + hierarchical) { + $tree = TaxOption::find()->getTree($model->tax_group_id); + $form->field($model, 'parent_id')->dropDownList( + ArtboxTreeHelper::treeMap($tree, 'tax_option_id', 'ValueRenderFlash', '.'), + [ + 'prompt' => Yii::t('rubrication', 'Root level'), + 'options' => [ + $model->tax_option_id => ['disabled' => true] + ] + ]); + + }else { + + $form->field($model, 'parent_id')->hiddenInput()->label(''); + } + ?> + + + field($model, 'image')->widget(\kartik\file\FileInput::classname(), [ + 'language' => 'ru', + 'options' => [ + 'accept' => 'image/*', + 'multiple' => false, + ], + 'pluginOptions' => [ + 'allowedFileExtensions' => ['jpg', 'gif', 'png'], + 'initialPreview' => !empty($model->imageUrl) ? \common\components\artboximage\ArtboxImageHelper::getImage($model->imageUrl, 'list') : '', + 'overwriteInitial' => true, + 'showRemove' => false, + 'showUpload' => false, + 'previewFileType' => 'image', + ], + ]); ?> + field($model, 'sort')->dropDownList(RubricationHelper::SortArray()) ?> + +
    + isNewRecord ? Yii::t('rubrication', 'Create') : Yii::t('rubrication', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> + isNewRecord) :?> + 'create_and_new', 'class' => 'btn btn-primary']) ?> + +
    + + + +
    diff --git a/common/modules/rubrication/views/tax-option/_search.php b/common/modules/rubrication/views/tax-option/_search.php new file mode 100755 index 0000000..8414c97 --- /dev/null +++ b/common/modules/rubrication/views/tax-option/_search.php @@ -0,0 +1,37 @@ + + + diff --git a/common/modules/rubrication/views/tax-option/create.php b/common/modules/rubrication/views/tax-option/create.php new file mode 100755 index 0000000..5ce0728 --- /dev/null +++ b/common/modules/rubrication/views/tax-option/create.php @@ -0,0 +1,24 @@ +title = Yii::t('rubrication', 'Create Tax Option'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', 'Groups'), 'url' => ['tax-group/index']]; +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', $group->name), 'url' => ['index', 'group' => $group->tax_group_id]]; +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', Yii::t('rubrication', 'Options of {name}', ['name' => $group->name])), 'url' => ['index', 'group' => $group->tax_group_id]]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + + render('_form', [ + 'model' => $model, + 'group' => $group + ]) ?> + +
    diff --git a/common/modules/rubrication/views/tax-option/index.php b/common/modules/rubrication/views/tax-option/index.php new file mode 100755 index 0000000..dbd2389 --- /dev/null +++ b/common/modules/rubrication/views/tax-option/index.php @@ -0,0 +1,100 @@ +title = Yii::t('rubrication', 'Options for group "{group}"', ['group' => $group->name]); +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', 'Groups'), 'url' => ['tax-group/index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + render('_search', ['model' => $searchModel]); ?> + +

    + tax_group_id], ['class' => 'btn btn-success']) ?> +

    + +hierarchical) :?> + $dataProvider, +// 'filterModel' => $searchModel, + 'columns' => [ + [ + 'label'=> Yii::t('rubrication', 'Value'), + 'content'=>function($data){ + return str_repeat('-', $data->depth) .' '. $data->ValueRenderFlash; + } + ], + 'alias', + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{view} {update} {delete} {synonim}', + 'buttons' => [ + 'synonim' => function ($url, $model) { + return Html::a('', $url, [ + 'title' => Yii::t('rubrication', 'Synonims'), + ]); + }, + ], + 'urlCreator' => function ($action, $model, $key, $index) { + if ($action === 'view') { + $url = '/admin/rubrication/tax-option/view?id=' . $model->tax_option_id; + return $url; + } elseif ($action === 'update') { + $url ='/admin/rubrication/tax-option/update?id='.$model->tax_option_id; + return $url; + } elseif ($action === 'delete') { + $url ='/admin/rubrication/tax-option/delete?id='.$model->tax_option_id; + return $url; + } elseif ($action === 'synonim') { + $url ='/admin/rubrication/tax-synonim/delete?id='.$model->tax_option_id; + return $url; + } + } + ], + ], + ]);?> + + $dataProvider, +// 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + 'valueRenderHTML', + 'alias', + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{update} {delete} {synonim}', + 'buttons' => [ + 'synonim' => function ($url, $model) { + return Html::a('', $url, [ + 'title' => Yii::t('rubrication', 'Synonims'), + ]); + }, + ], + 'urlCreator' => function ($action, $model, $key, $index) { + if ($action === 'update') { + $url ='/admin/rubrication/tax-option/update?id='.$model->tax_option_id; + return $url; + } elseif ($action === 'delete') { + $url ='/admin/rubrication/tax-option/delete?id='.$model->tax_option_id; + return $url; + } elseif ($action === 'synonim') { + $url ='/admin/rubrication/tax-synonim/delete?id='.$model->tax_option_id; + return $url; + } + } + ], + ], + ]);?> + +
    diff --git a/common/modules/rubrication/views/tax-option/update.php b/common/modules/rubrication/views/tax-option/update.php new file mode 100755 index 0000000..b115adb --- /dev/null +++ b/common/modules/rubrication/views/tax-option/update.php @@ -0,0 +1,25 @@ +title = Yii::t('rubrication', 'Update {modelClass}: ', [ + 'modelClass' => 'Tax Option', +]) . ' ' . $model->tax_option_id; +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', 'Groups'), 'url' => ['tax-group/index']]; +$this->params['breadcrumbs'][] = ['label' => $group->name, 'url' => ['view', 'id' => $group->tax_group_id]]; +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', Yii::t('rubrication', 'Options of {name}', ['name' => $group->name])), 'url' => ['index', 'group' => $group->tax_group_id]]; +$this->params['breadcrumbs'][] = Yii::t('rubrication', 'Update'); +?> +
    + +

    title) ?>

    + + render('_form', [ + 'model' => $model, + 'group' => $group + ]) ?> + +
    diff --git a/common/modules/rubrication/views/tax-option/value/_fields_float.php b/common/modules/rubrication/views/tax-option/value/_fields_float.php new file mode 100755 index 0000000..6a35b2f --- /dev/null +++ b/common/modules/rubrication/views/tax-option/value/_fields_float.php @@ -0,0 +1 @@ +field($valueModel, 'value')->textInput() ?> \ No newline at end of file diff --git a/common/modules/rubrication/views/tax-option/value/_fields_int.php b/common/modules/rubrication/views/tax-option/value/_fields_int.php new file mode 100755 index 0000000..6a35b2f --- /dev/null +++ b/common/modules/rubrication/views/tax-option/value/_fields_int.php @@ -0,0 +1 @@ +field($valueModel, 'value')->textInput() ?> \ No newline at end of file diff --git a/common/modules/rubrication/views/tax-option/value/_fields_link.php b/common/modules/rubrication/views/tax-option/value/_fields_link.php new file mode 100755 index 0000000..5aeb45e --- /dev/null +++ b/common/modules/rubrication/views/tax-option/value/_fields_link.php @@ -0,0 +1,2 @@ +field($valueModel, 'name')->textInput(['maxlength' => true]) ?> +field($valueModel, 'link')->textInput(['maxlength' => true]) ?> \ No newline at end of file diff --git a/common/modules/rubrication/views/tax-option/value/_fields_string.php b/common/modules/rubrication/views/tax-option/value/_fields_string.php new file mode 100755 index 0000000..6a35b2f --- /dev/null +++ b/common/modules/rubrication/views/tax-option/value/_fields_string.php @@ -0,0 +1 @@ +field($valueModel, 'value')->textInput() ?> \ No newline at end of file diff --git a/common/modules/rubrication/views/tax-option/view.php b/common/modules/rubrication/views/tax-option/view.php new file mode 100755 index 0000000..8858d75 --- /dev/null +++ b/common/modules/rubrication/views/tax-option/view.php @@ -0,0 +1,46 @@ +title = $model->valueRenderFlash; +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', 'Groups'), 'url' => ['tax-group/index']]; +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', $group->name), 'url' => ['index', 'group' => $group->tax_group_id]]; +$this->params['breadcrumbs'][] = ['label' => Yii::t('rubrication', Yii::t('rubrication', 'Options of {name}', ['name' => $group->name])), 'url' => ['index', 'group' => $group->tax_group_id]]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + +

    + $model->tax_option_id], ['class' => 'btn btn-primary']) ?> + $model->tax_option_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('rubrication', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> + tax_group_id], ['class' => 'btn btn-success']) ?> + parent_id)) :?> + $model->parent->ValueRenderFlash]), ['tax-option/create?group='. $model->tax_group_id .'&parent='. $model->parent->tax_option_id], ['class' => 'btn btn-success']) ?> + +

    + + $model, + 'attributes' => [ + 'tax_option_id', + 'ValueRenderFlash', + 'alias', + 'parent.ValueRenderFlash', + 'group.name', + 'sort', + ], + ]) ?> + +
    diff --git a/common/translation/ru/app.php b/common/translation/ru/app.php new file mode 100755 index 0000000..e1eea62 --- /dev/null +++ b/common/translation/ru/app.php @@ -0,0 +1,81 @@ + 'ID', + 'username' => 'Имя', + 'surname' => 'Фамилия', + 'auth_key' => 'Auth Key', + 'password_hash' => 'Password Hash', + 'password_reset_token' => 'Password Reset Token', + 'email' => 'Логин (e-mail)', + 'phone' => 'Телефон', + 'status' => 'Статус', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + 'verifyCode' => 'Код проверки', + 'password' => 'Пароль', + 'password_repeat' => 'Повторить пароль', + 'registration' => 'Регистрация', + 'message' => 'Этот {field} уже занят', + 'message_match_password' => 'Пароли не совпадают', + 'exit' => 'Выход', + 'enter' => 'Войти', + 'your_personal_area' => 'Вход в личный кабинет', + 'forgot_password' => 'Забыли пароль?', + 'rememberMe' => 'Запомнить меня', + 'articles' => 'Всего товаров', + 'code' => 'Код: {0}', + 'checkout' => 'оформить заказ', + 'sum' => 'Сумма', + 'continue_shopping' => 'продолжить покупки', + 'edit_personal_data' => 'Редактировать личные данные', + 'personal_data' => 'Личные данные', + 'my_orders' => 'Мои заказы', + 'bookmarks' => 'Закладки', + 'basket' => 'Корзина', + 'banner_id' => 'Banner ID', + 'image' => 'Изображение', + 'alt' => 'Описание', + 'title' => 'Заголовок', + 'url' => 'Ссылка', + 'width' => 'Ширина', + 'height' => 'Высота', + 'blog_id' => 'Blog ID', + 'user_id' => 'User ID', + 'name' => 'Название', + 'link' => 'Ссылка', + 'date_add' => 'Дата добавления', + 'user_add_id' => 'User Add ID', + 'view_count' => 'Количество просмотров', + 'description' => 'Описание', + 'cover' => 'Фото главное', + 'event_id' => 'Event ID', + 'alias' => 'Ссылка', + 'body' => 'Тело', + 'meta_title' => 'Мета заголовок', + 'h1' => 'H1', + 'seo_text' => 'Сео Текст', + 'end_at' => 'Срок действия по', + 'order_items_id' => 'Order Items ID', + 'order_id' => 'Order ID', + 'item_id' => 'Item ID', + 'item_count' => 'Количество', + 'price' => 'Цена', + 'customer_id' => 'Customer ID', + 'delivery' => 'Доставка', + 'payment' => 'Оплата', + 'seo_id' => 'Seo ID', + 'controller' => 'Controller', + 'seo_category_id' => 'Seo Category ID', + 'seo_dynamic_id' => 'Seo Dynamic ID', + 'action' => 'Action', + 'fields' => 'Поля', + 'param' => 'Параметры', + 'key' => 'Ключ', + 'service_id' => 'Service ID', + 'slider_id' => 'Slider ID', + 'speed' => 'Скорость', + 'duration' => 'Продолжительность', + 'slider_image_id' => 'Slider Image ID', + 'sort' => 'Сортировка', + +]; \ No newline at end of file diff --git a/common/translation/ru/product.php b/common/translation/ru/product.php new file mode 100755 index 0000000..ca15056 --- /dev/null +++ b/common/translation/ru/product.php @@ -0,0 +1,32 @@ + 'Категории', + 'Create Category' => 'Создать Категорию', + 'Name' => 'Наименование', + 'Set populary' => 'Сделать популярной', + 'Set not populary' => 'Сделать не популярной', + 'Remote ID' => 'ID в 1С', + 'Search for "{keywords}"' => 'Поиск по "{keywords}"', + 'Search for "{keywords}" in category "{category}"' => 'Поиск по "{keywords}" в категории "{category}"', + 'Promo products' => 'Акционные товары', + 'New products' => 'Новинки', + 'Top products' => 'Популярные', + 'Similar products' => 'Похожие товары', + 'Brands' => 'Бренды', + 'Brand' => 'Бренд', + 'Categories' => 'Категории', + 'Category' => 'Категория', + 'Select brand' => 'Выберите бренд', + 'Select category' => 'Выберите категорию', + 'SKU' => 'Артикул', + 'Stock' => 'Остаток', + 'Price' => 'Цена', + 'Price Old' => 'Старая Цена', + 'Products' => 'Товары', + 'Product' => 'Товар', + 'Variants' => 'Модификации', + 'Variant' => 'Модификация', + 'Create Product' => 'Создать Товар', + 'Enable' => 'Доступно', + 'Disable' => 'Отсутсвует', +]; \ No newline at end of file diff --git a/common/widgets/Alert.php b/common/widgets/Alert.php new file mode 100755 index 0000000..5b5bbb2 --- /dev/null +++ b/common/widgets/Alert.php @@ -0,0 +1,79 @@ +session->setFlash('error', 'This is the message'); + * \Yii::$app->session->setFlash('success', 'This is the message'); + * \Yii::$app->session->setFlash('info', 'This is the message'); + * ``` + * + * Multiple messages could be set as follows: + * + * ```php + * \Yii::$app->session->setFlash('error', ['Error 1', 'Error 2']); + * ``` + * + * @author Kartik Visweswaran + * @author Alexander Makarov + */ +class Alert extends \yii\bootstrap\Widget +{ + /** + * @var array the alert types configuration for the flash messages. + * This array is setup as $key => $value, where: + * - $key is the name of the session flash variable + * - $value is the bootstrap alert type (i.e. danger, success, info, warning) + */ + public $alertTypes = [ + 'error' => 'alert-danger', + 'danger' => 'alert-danger', + 'success' => 'alert-success', + 'info' => 'alert-info', + 'warning' => 'alert-warning' + ]; + + /** + * @var array the options for rendering the close button tag. + */ + public $closeButton = []; + + public function init() + { + parent::init(); + + $session = \Yii::$app->session; + $flashes = $session->getAllFlashes(); + $appendCss = isset($this->options['class']) ? ' ' . $this->options['class'] : ''; + + foreach ($flashes as $type => $data) { + if (isset($this->alertTypes[$type])) { + $data = (array) $data; + foreach ($data as $i => $message) { + /* initialize css class for each alert box */ + $this->options['class'] = $this->alertTypes[$type] . $appendCss; + + /* assign unique id to each alert box */ + $this->options['id'] = $this->getId() . '-' . $type . '-' . $i; + + echo \yii\bootstrap\Alert::widget([ + 'body' => $message, + 'closeButton' => $this->closeButton, + 'options' => $this->options, + ]); + } + + $session->removeFlash($type); + } + } + } +} diff --git a/common/widgets/BasketHead.php b/common/widgets/BasketHead.php new file mode 100755 index 0000000..79535cd --- /dev/null +++ b/common/widgets/BasketHead.php @@ -0,0 +1,50 @@ +session->get('order'); + unset($sessionData['order_id']); + $count = count($sessionData); + $price = 0; + if(is_array($sessionData) && !empty($sessionData)){ + + $variant = ProductVariant::find()->where(['product_variant_id'=>array_keys($sessionData)])->indexBy('product_variant_id')->all(); + + + foreach ($sessionData as $k => $item) { + $sessionData[$k]['item'] = $variant[$k]; + $price += $variant[$k]->price * $sessionData[$k]['num']; + } + + + return $this->render('basket_head',[ + 'items'=>$sessionData, + 'count' => $count, + 'price' => $price + ]); + + } + + } +} \ No newline at end of file diff --git a/common/widgets/BasketModal.php b/common/widgets/BasketModal.php new file mode 100755 index 0000000..8a30fa7 --- /dev/null +++ b/common/widgets/BasketModal.php @@ -0,0 +1,44 @@ +session->get('order'); + unset($sessionData['order_id']); + $count = count($sessionData); + $price = 0; + if(is_array($sessionData) && !empty($sessionData)){ + + $variant = ProductVariant::find()->where(['product_variant_id'=>array_keys($sessionData)])->indexBy('product_variant_id')->all(); + + + foreach ($sessionData as $k => $item) { + $sessionData[$k]['item'] = $variant[$k]; + $price += $variant[$k]->price * $sessionData[$k]['num']; + } + + + return $this->render('basket_modal',[ + 'items'=>$sessionData, + 'count' => $count, + 'price' => $price + ]); + + } + + } + +} \ No newline at end of file diff --git a/common/widgets/FieldEditor.php b/common/widgets/FieldEditor.php new file mode 100755 index 0000000..fcb7d04 --- /dev/null +++ b/common/widgets/FieldEditor.php @@ -0,0 +1,48 @@ +item_id && $this->model){ + $widgetData = $this->findModel(); + } else { + $widgetData= [new Fields()]; + } + + return $this->render($this->template.'_field',['model'=>ArrayHelper::toArray($widgetData)]); + } + + protected function findModel() + { + + if (($model = Fields::find()->where([ + 'table_id'=>$this->item_id, + 'table_name'=>$this->model, + 'field_type'=>$this->template, + 'language'=>$this->language, + ])->all())) { + + return $model; + + } else { + return [new Fields()]; + } + } +} \ No newline at end of file diff --git a/common/widgets/Mailer.php b/common/widgets/Mailer.php new file mode 100755 index 0000000..a3936ec --- /dev/null +++ b/common/widgets/Mailer.php @@ -0,0 +1,52 @@ +IsSMTP(); + $mail->SMTPDebug = 1; + $mail->SMTPAuth = true; + $mail->SMTPSecure = 'ssl'; + $mail->Host = 'smtp.gmail.com'; + $mail->Port = 465; + $mail->CharSet = 'UTF-8'; + $mail->Username = "order.linija.svitla.ua@gmail.com"; + $mail->Password = "linija-svitla.ua339-92-33"; + $mail->SetFrom('order.linija.svitla.ua@gmail.com'); + $mail->Subject = $this->subject; + $mail->MsgHTML($this->render($this->type, ['params' => $this->params])); + $mail->AddAddress('bzika@ukr.net'); + $mail->AddAddress('dockdep@gmail.com'); + $mail->AddAddress($this->email); + $mail->send(); + /* */ +// if(!$mail->send()) { +// \Yii::$app->getSession()->setFlash('error', 'Mailer Error: ' . $mail->ErrorInfo); +// return 'Mailer Error: ' . $mail->ErrorInfo; +// } else { +// return 'Message has been sent'; +// } + } +} + diff --git a/common/widgets/views/basket_head.php b/common/widgets/views/basket_head.php new file mode 100755 index 0000000..6b6b021 --- /dev/null +++ b/common/widgets/views/basket_head.php @@ -0,0 +1,10 @@ + +
    + +
    +
    'head_basket_count']) :'' ?>
    +
    + +
    diff --git a/common/widgets/views/basket_modal.php b/common/widgets/views/basket_modal.php new file mode 100755 index 0000000..96265f0 --- /dev/null +++ b/common/widgets/views/basket_modal.php @@ -0,0 +1,53 @@ + +
    +
      + + +
    • +
      +
      +
      + product->image)) :?> + + + <?= $item['item']->product->image->alt ? $item['item']->product->image->alt : $item['item']->product->name?> + +
      +
      + product->name.' '.$item['item']->name?> + +
      +
      +
      + +
      +
      +
      +
      -
      +
      +
      +
      price * $item['num'] ?>грн.
      +
      +
      +
    • + + +
    +
    +
    +

    :

    +

    : грн.

    +
    +
    + 'close']) ?> + 'button']);?> +
    +
    diff --git a/common/widgets/views/comment_notify.php b/common/widgets/views/comment_notify.php new file mode 100755 index 0000000..9ed6242 --- /dev/null +++ b/common/widgets/views/comment_notify.php @@ -0,0 +1,39 @@ + + + + + + Rukzachok.com.ua + + + +
    +

    Ваш коммертарий успешно опубликован.

    +

    Добрый день!

    +

    Ваш комментарий прошел модерацию и успешно опубликован.

    +

    text; ?>

    +

    Чтобы просмотреть комментарий перейдите по ссылке: Прочесть комментарий

    +
    + + \ No newline at end of file diff --git a/common/widgets/views/education_field.php b/common/widgets/views/education_field.php new file mode 100755 index 0000000..b24e544 --- /dev/null +++ b/common/widgets/views/education_field.php @@ -0,0 +1,83 @@ + +
    + +
    Образование
    + +
    + + + + 'form-group', + 'id' => isset( $model[ $i ][ 'parent_key' ] ) ? $model[ $i ][ 'parent_key' ] : 0, + ]) ?> +
    + + +
    +
    + + +
    +
    + + +
    + + + + + +
    +

    добавить еще

    +
    + + + + diff --git a/common/widgets/views/order.php b/common/widgets/views/order.php new file mode 100755 index 0000000..5d566f9 --- /dev/null +++ b/common/widgets/views/order.php @@ -0,0 +1,126 @@ + + + + + + linija-svitla.ua + + + +
    +
    +
    +

    Добрый день, name ?>!

    +

    Ваш заказ получен. В ближайшее время с Вами свяжется менеджер для уточнения деталей

    +
    + + + + + + + + + + +
    + Заказ №id ?> +
    + На сумму грн +
    + Данные покупателя +
    + name ?> +
    + phone ?> +
    + email ?> +
    + +
    + city ?> +
    + adress ?> + +
    + Спасибо за Ваш заказ! +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
     НазваниеКоличествоЦена
    + + + + + × + + грн +
    + Всего к оплате: + + грн +
    +
    +
    +
    + + + + + + +
    + (044) 339-92-33
    + (095) 282-85-08
    + (068) 776-60-67 +
    + www.linija-svitla.ua +
    + +
    +
    + + \ No newline at end of file diff --git a/common/widgets/views/password.php b/common/widgets/views/password.php new file mode 100755 index 0000000..163a4b5 --- /dev/null +++ b/common/widgets/views/password.php @@ -0,0 +1,16 @@ +urlManager->createAbsoluteUrl(['site/reset-password', 'token' => $params->password_reset_token]); +?> +
    +

    Hello username) ?>,

    + +

    Follow the link below to reset your password:

    + +

    +
    + \ No newline at end of file diff --git a/common/widgets/views/registration.php b/common/widgets/views/registration.php new file mode 100755 index 0000000..636cb3f --- /dev/null +++ b/common/widgets/views/registration.php @@ -0,0 +1,51 @@ + + + + + + + + Rukzachok.com.ua + + + +
    +
    +
    +

    Добрый день, !

    +

    Спасибо за регистрацию . Приятных покупок в магазине Rukzachok.com.ua

    +
    +
    +
    + + + + + + +
    + +38 (067) 000 00 00 + + rukzachok.com.ua +
    + +
    +
    + + diff --git a/common/widgets/views/test.php b/common/widgets/views/test.php new file mode 100755 index 0000000..41e1cee --- /dev/null +++ b/common/widgets/views/test.php @@ -0,0 +1 @@ +

    H1

    \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100755 index 0000000..815d06a --- /dev/null +++ b/composer.json @@ -0,0 +1,65 @@ +{ + "name": "yiisoft/yii2-app-advanced", + "description": "Yii 2 Advanced Project Template", + "keywords": ["yii2", "framework", "advanced", "project template"], + "homepage": "http://www.yiiframework.com/", + "type": "project", + "license": "BSD-3-Clause", + "support": { + "issues": "https://github.com/yiisoft/yii2/issues?state=open", + "forum": "http://www.yiiframework.com/forum/", + "wiki": "http://www.yiiframework.com/wiki/", + "irc": "irc://irc.freenode.net/yii", + "source": "https://github.com/yiisoft/yii2" + }, + "minimum-stability": "dev", + + "require": { + "php": ">=5.4.0", + "yiisoft/yii2": ">=2.0.6", + "yiisoft/yii2-bootstrap": "*", + "yiisoft/yii2-swiftmailer": "*", + "dmstr/yii2-adminlte-asset": "2.*", + "yiisoft/yii2-jui": "^2.0", + "kartik-v/yii2-widget-select2": "@dev", + "mihaildev/yii2-ckeditor": "*", + "developeruz/yii2-db-rbac": "*", + "nodge/yii2-eauth": "*", + "yiisoft/yii2-imagine": "^2.0", + "mihaildev/yii2-elfinder": "^1.1", + "kartik-v/yii2-widget-colorinput": "*", + "2amigos/yii2-transliterator-helper": "*", + "rmrevin/yii2-comments": "1.4.*", + "bower-asset/admin-lte": "*", + "FortAwesome/Font-Awesome": "*", + "kartik-v/yii2-widget-datepicker": "*", + "unclead/yii2-multiple-input": "~1.0", + "codeception/codeception":"*", + "phpmailer/phpmailer": "^5.2", + "kartik-v/yii2-grid": "@dev", + "kartik-v/yii2-mpdf": "@dev", + "kartik-v/yii2-widget-fileinput": "@dev", + "maxmirazh33/yii2-uploadable-cropable-image": "*", + "iutbay/yii2-imagecache": "*", + "yurkinx/yii2-image": "dev-master", + "cics/yii2-video-embed-widget": "dev-master", + "sersid/yii2-owl-carousel-asset": "*", + "wbraganca/yii2-dynamicform": "dev-master", + "kartik-v/yii2-widget-rating": "*" + }, + "require-dev": { + "yiisoft/yii2-codeception": "*", + "yiisoft/yii2-debug": "*", + "yiisoft/yii2-gii": "*", + "yiisoft/yii2-faker": "*" + }, + "config": { + "process-timeout": 1800 + }, + "extra": { + "asset-installer-paths": { + "npm-asset-library": "vendor/npm", + "bower-asset-library": "vendor/bower" + } + } +} diff --git a/console/config/.gitignore b/console/config/.gitignore new file mode 100755 index 0000000..8ded784 --- /dev/null +++ b/console/config/.gitignore @@ -0,0 +1,2 @@ +main-local.php +params-local.php \ No newline at end of file diff --git a/console/config/bootstrap.php b/console/config/bootstrap.php new file mode 100755 index 0000000..1924a47 --- /dev/null +++ b/console/config/bootstrap.php @@ -0,0 +1,9 @@ + 'app-console', + 'basePath' => dirname(__DIR__), + 'bootstrap' => ['log'], + 'controllerNamespace' => 'console\controllers', + 'components' => [ + 'urlManager' => [ + 'baseUrl' => 'http://www.linija-svitla.ua', + 'enablePrettyUrl' => true, + 'showScriptName' => false, + + ], + 'log' => [ + 'targets' => [ + [ + 'class' => 'yii\log\FileTarget', + 'levels' => ['error', 'warning'], + ], + ], + ], + ], + 'params' => $params, +]; diff --git a/console/config/params.php b/console/config/params.php new file mode 100755 index 0000000..4ee7a49 --- /dev/null +++ b/console/config/params.php @@ -0,0 +1,4 @@ + 'admin@example.com', +]; diff --git a/console/controllers/.gitkeep b/console/controllers/.gitkeep new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/console/controllers/.gitkeep diff --git a/console/controllers/FilterController.php b/console/controllers/FilterController.php new file mode 100644 index 0000000..b4998c6 --- /dev/null +++ b/console/controllers/FilterController.php @@ -0,0 +1,198 @@ +all(); + + foreach($categories as $category){ + /** + *@var TaxGroup $taxGroup + *@var Category $category + *@var TaxOption $option + */ + + $taxOptions = $category->filterQuery->all(); + $brands = $category->brands; + foreach($brands as $brand){ + $taxOptions[] = [ + 'group_alias' => 'brands', + 'option_alias' => $brand->brand_id, + 'tax_option_id' => $brand->brand_id, + ]; + } + $count = count($taxOptions); + $key = 0; +// $sumArray = FilterCache::find()->select('options_key')->column(); +// print_r($sumArray); +// die(); + $sumArray=[]; + $optionsIdArray = []; + $params = []; + + $this->begin_time = time() - 1272000000 + floatval(microtime()); + $this->RecursiveOptionFinder($category,$count, $taxOptions,$key,$sumArray,$optionsIdArray,$params); + + $end_time = time() - 1272000000 + floatval(microtime()) - $this->begin_time; + print_r($end_time); + die(); + + } + } + + + /** + * @param Category $category + * @param $count + * @param TaxOption array $taxOptions + * @param $key + * @param $sumArray + * @param $optionsIdArray + * @param array $params + */ + + public function RecursiveOptionFinder($category, $count, $taxOptions, $key, &$sumArray, $optionsIdArray,$params){ + + for($o = $key; $o <= $count; $o++){ + if(isset($taxOptions[$o]) && (count($optionsIdArray) < self::DEPTH)){ + $_optionsIdArray = $optionsIdArray; + $_optionsIdArray[] = $taxOptions[$o]['tax_option_id']; + $sum = FilterCache::createCacheKey($_optionsIdArray); + if( !in_array( $sum, $sumArray)){ + + $sumArray[] = $sum; + $key = $o+1; + $this->selectParams($params,$taxOptions[$o]['group_alias'], $taxOptions[$o]['option_alias']); + $this->RecursiveOptionFinder($category,$count, $taxOptions, $key, $sumArray,$optionsIdArray,$params); + $optionsIdArray[] = $taxOptions[$o]['tax_option_id']; + $this->saveFilterCache($category,$params, $sum,$optionsIdArray); + $o++; + } else { + $optionsIdArray[] = $taxOptions[$o]['tax_option_id']; + $key = $o+1; + $this->selectParams($params,$taxOptions[$o]['group_alias'], $taxOptions[$o]['option_alias']); + $this->RecursiveOptionFinder($category,$count, $taxOptions, $key, $sumArray,$optionsIdArray,$params); + $o++; + } + } + } + } + + public function selectParams(&$params,$alias,$optionAlias){ + + if(isset($params[$alias])){ + $params[$alias][] = $optionAlias; + } else { + + $params = array_merge($params, [$alias=>[$optionAlias]]); + } + return $params; + } + + /** + * + * @param Category $category + * @param array $params + * @param $options_key + * @param array $optionsIdArray + */ + + public function saveFilterCache($category,$params, $options_key,$optionsIdArray){ + $count = $this->findItem($category,$params); + + $model = new FilterCache(); + $model->category_id = $category->category_id; + $model->count = $count; + $model->depth = count($optionsIdArray); + $model->options_key = $options_key; + $model->save(); + } + + + /** + * @param Category $category + * @param array $params + * @return int + */ + public function findItem($category,$params){ + return $this->getSearchQuery($category,$params)->count(); + //$count2 = $this->getSearchQuery2($category,$params)->count(); +// $this->count ++; +// if($this->count == 100){ +// $end_time = time() - 1272000000 + floatval(microtime()) - $this->begin_time; +// print_r($end_time); +// die(); +// } + } + + public function getSearchQuery($category = null, $params = []) { + + + /** @var ActiveQuery $query */ + /**@var Category $category **/ + $query = $category->getProducts(); + + + $query->select(['product.*']); + $query->joinWith(['enabledVariants','brand','options', 'category']); + + $query->groupBy(['product.product_id', 'product_variant.price']); + + ProductHelper::_setQueryParams($query, $params); + + $query->andWhere(['!=', ProductVariant::tableName() .'.status', 1]); + + + + return $query; + + } + +// public function getSearchQuery2($category = null, $params = []) { +// +// +// /** @var ActiveQuery $query */ +// /**@var Category $category **/ +// $query = $category->getProducts(); +// +// +// $query->select(['product.*']); +// $query->joinWith(['enabledVariants','brand','options', 'category']); +// +// $query->groupBy(['product.product_id', 'product_variant.price']); +// +// FilterHelper::setNewQueryParams($query, $params); +// +// $query->andWhere(['!=', ProductVariant::tableName() .'.status', 1]); +// +// +// +// return $query; +// +// } + +} + diff --git a/console/controllers/ImportController.php b/console/controllers/ImportController.php new file mode 100755 index 0000000..e7abad1 --- /dev/null +++ b/console/controllers/ImportController.php @@ -0,0 +1,87 @@ +all(); + foreach($files as $file_object){ + $file = $file_object->image; + $file_array = explode('/',$file); + if(is_array($file_array) && count($file_array) >3){ + $count = count($file_array); + $file_name = $file_array[$count-2]."_".$file_array[$count-1]; + print_r($file_name); + $save_image = Yii::getAlias('@productsDir') . "/" . $file_name; + copy($file, $save_image); + $file_object->image = $file_name; + $file_object->save(); + } + + } + + + } + + private function getProductsFile($file_type = 'uploadFileProducts') { + $filename = Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@'. $file_type); + if (!is_file($filename)) { + $this->stderr('Task already executed'); + return Controller::EXIT_CODE_ERROR; + } + return fopen ($filename, 'r'); + } + + public function actionProducts() { + if (file_exists(Yii::getAlias('@uploadDir/goProducts.lock'))) { + $this->errors[] = 'Task already executed'; + return Controller::EXIT_CODE_ERROR; + } + $ff = fopen(Yii::getAlias('@uploadDir/goProducts.lock'), 'w+'); + fclose($ff); + $model = new Import(); + $model->goProducts(0, null); + unlink(Yii::getAlias('@uploadDir/goProducts.lock')); + return Controller::EXIT_CODE_NORMAL; + } + + public function actionPrices() { + if (file_exists(Yii::getAlias('@uploadDir/goPrices.lock'))) { + $this->stderr('Task already executed'); + return Controller::EXIT_CODE_ERROR; + } + $ff = fopen(Yii::getAlias('@uploadDir/goPrices.lock'), 'w+'); + fclose($ff); + $model = new Import(); + $data = $model->goPrices(0, null); + unlink(Yii::getAlias('@uploadDir/goPrices.lock')); + return Controller::EXIT_CODE_NORMAL; + } + + private function saveNotFoundRecord (array $line, $filename) + { + $str = implode (';', $line)."\n"; + $str = iconv ("UTF-8//TRANSLIT//IGNORE", "windows-1251", $str); + + $fg = fopen (Yii::getAlias('@uploadDir') .'/'. $filename, 'a+'); + fputs ($fg, $str); + fclose ($fg); + } +} \ No newline at end of file diff --git a/console/controllers/RbacController.php b/console/controllers/RbacController.php new file mode 100755 index 0000000..799002f --- /dev/null +++ b/console/controllers/RbacController.php @@ -0,0 +1,46 @@ +authManager; + + // add "createPost" permission + $createPost = $auth->createPermission('createPost'); + $createPost->description = 'Create a post'; + $auth->add($createPost); + + // add "updatePost" permission + $updatePost = $auth->createPermission('updatePost'); + $updatePost->description = 'Update post'; + $auth->add($updatePost); + +// // add "author" role and give this role the "createPost" permission + $author = $auth->createRole('author'); + $auth->add($author); + $auth->addChild($author, $createPost); +// +// // add "admin" role and give this role the "updatePost" permission +// // as well as the permissions of the "author" role + $admin = $auth->createRole('admin'); + $auth->add($admin); + $auth->addChild($admin, $updatePost); + $auth->addChild($admin, $author); +// +// // Assign roles to users. 1 and 2 are IDs returned by IdentityInterface::getId() +// // usually implemented in your User model. +// $auth->assign($author, 2); +// $auth->assign($admin, 1); + + + } +} + + + diff --git a/console/controllers/SiteMapController.php b/console/controllers/SiteMapController.php new file mode 100755 index 0000000..c946ec6 --- /dev/null +++ b/console/controllers/SiteMapController.php @@ -0,0 +1,226 @@ +search($category, $filter); + if(!empty($productProvider->models)){ + return true; + } else { + return false; + } + } + + + + public function getAddStatic(){ + return [ + 'http://www.linija-svitla.ua', + 'http://www.linija-svitla.ua/catalog' + ]; + } + + + public function getProducts() { + return Product::find()->all(); + + } + + + public function getSeoLinks() { + return Seo::find()->where(['meta' => ''])->all(); + + } + + public function getStaticPages(){ + return Page::find()->all(); + } + + + public function getCategories(){ + return Category::find()->all(); + } + + + public function getArticles(){ + return Articles::find()->all(); + } + + public function getBrands($category){ + + return $category->brands; + } + + /** + * @param $category Category; + * @return mixed + */ + + public function getFilters($category){ + + return $category->getActiveFilters(); + + } + + + public function checkUrl($url){ + if(!in_array($url, $this->urlList)){ + $this->urlList[] = $url; + return true; + } else { + return false; + } + } + + + public function createRow( $url, $priority, &$content ){ + if($this->checkUrl($url)){ + print $this->count++ . "\n"; + $content .= '' . + '' . $url . '' . + '' . date('Y-m-d') . '' . + 'Weekly' . + '' . $priority .'' . + ''; + } + } + + + public function actionProcess() { + + $config = ArrayHelper::merge( + require(__DIR__ . '/../../frontend/config/main.php'), + require(__DIR__ . '/../../common/config/main.php') + + ); + + Yii::$app->urlManager->addRules($config['components']['urlManager']['rules']); + + + + $dirName = Yii::getAlias('@frontend').'/web'; + + $filename = 'sitemap.xml'; + + setlocale(LC_ALL, 'ru_RU.CP1251'); + $handle = fopen($dirName .'/'. $filename, "w"); + + $content = ''; + + foreach ($this->getAddStatic() as $page) { + $this->createRow($page , 1,$content); + } + + foreach ($this->getStaticPages() as $page) { + $url = Url::to(['text/main','translit' => $page->translit]); + $this->createRow($url , 1,$content); + } + + foreach ($this->getCategories() as $category) { + $url = Url::to(['catalog/category', 'category' => $category]); + $this->createRow($url , 1,$content); + } + + + foreach ($this->getProducts() as $product) { + + $url = Url::to(['catalog/product', 'product' => $product]); + $this->createRow($url , 0.9, $content); + } + + + foreach ($this->getArticles() as $article) { + + $url = Url::to(['articles/show', 'translit' => $article->translit]); + $this->createRow($url , 0.8,$content); + + } + + + foreach($this->getCategories() as $category){ + foreach ($this->getBrands($category) as $brand) { + if($this->checkFilter($category, ['brands' => [$brand->brand_id]])){ + $url = Url::to(['catalog/category', 'category' => $category, 'filters' => ['brands' => [$brand->alias]]]) ; + $this->createRow($url , 0.8, $content); + } + } + } + + + foreach($this->getCategories() as $category){ + foreach ($this->getFilters($category) as $filter) { + if($this->checkFilter($category, [$filter['group_alias'] => [$filter['option_alias']]])){ + $url = Url::to(['catalog/category', 'category' => $category, 'filters' => [$filter['group_alias'] => [$filter['option_alias']]] ]); + $this->createRow($url , 0.8, $content); + } + + } + } + + foreach($this->getSeoLinks() as $link){ + $url = Yii::$app->urlManager->baseUrl.$link->url; + $this->createRow($url , 0.7, $content); + + } + + + +// foreach($this->getCategories() as $category){ +// foreach ($this->getFilters($category) as $filter1) { +// foreach ($this->getFilters($category) as $filter2) { +// if($this->checkFilter($category, [$filter1['group_alias'] => [$filter1['option_alias']],$filter2['group_alias'] => [$filter2['option_alias']]] )){ +// $url = Url::to(['catalog/category', 'category' => $category, 'filters' => [$filter1['group_alias'] => [$filter1['option_alias']],$filter2['group_alias'] => [$filter2['option_alias']]] ]); +// $this->createRow($url , 0.7, $content); +// } +// +// } +// +// foreach ($this->getBrands($category) as $brand) { +// if($this->checkFilter($category, ['brands' => [$brand->brand_id], $filter1['group_alias'] => [$filter1['option_alias']]] )){ +// $url = Url::to(['catalog/category', 'category' => $category, 'filters' => ['brands' => [$brand->alias],$filter1['group_alias'] => [$filter1['option_alias']]]]); +// $this->createRow($url , 0.7,$content); +// } +// +// } +// } +// } + + + + $content .= ''; + + fwrite($handle, $content); + fclose($handle); + + print $dirName .'/'. $filename; + } + +} diff --git a/console/migrations/m130524_201442_init.php b/console/migrations/m130524_201442_init.php new file mode 100755 index 0000000..bb7e48a --- /dev/null +++ b/console/migrations/m130524_201442_init.php @@ -0,0 +1,33 @@ +db->driverName === 'mysql') { + // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci + $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; + } + + $this->createTable('{{%user}}', [ + 'id' => $this->primaryKey(), + 'username' => $this->string()->notNull()->unique(), + 'auth_key' => $this->string(32)->notNull(), + 'password_hash' => $this->string()->notNull(), + 'password_reset_token' => $this->string()->unique(), + 'email' => $this->string()->notNull()->unique(), + + 'status' => $this->smallInteger()->notNull()->defaultValue(10), + 'created_at' => $this->integer()->notNull(), + 'updated_at' => $this->integer()->notNull(), + ], $tableOptions); + } + + public function down() + { + $this->dropTable('{{%user}}'); + } +} diff --git a/console/migrations/m160126_071717_rubrication.php b/console/migrations/m160126_071717_rubrication.php new file mode 100755 index 0000000..d88eb02 --- /dev/null +++ b/console/migrations/m160126_071717_rubrication.php @@ -0,0 +1,135 @@ +db->driverName === 'mysql') { + // Only for MySQL + $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; + + // @todo https://habrahabr.ru/post/138947/ + } elseif ($this->db->driverName === 'pgsql') { + // Only for PostgreSQL + // @todo use intarray field for tax_options + } + $this->createTable('{{%tax_group}}', [ + 'tax_group_id' => $this->primaryKey(), + 'alias' => $this->string(50)->notNull(), + 'name' => $this->string(255)->notNull(), + 'description' => $this->text(), + 'module' => $this->string(50)->notNull(), + 'hierarchical' => $this->boolean()->notNull()->defaultValue(false), + 'settings' => $this->text() + ], $tableOptions); + + $this->createTable('{{%tax_option}}', [ + 'tax_option_id' => $this->bigPrimaryKey(), + 'tax_group_id' => $this->integer()->notNull(), + 'parent_id' => $this->integer()->notNull()->defaultValue(0), + 'path' => $this->string(), + 'depth' => $this->integer(), + 'sort' => $this->integer()->notNull()->defaultValue(0), + 'default_value' => $this->integer(), + 'alias' => $this->string(50)->notNull()->defaultValue(''), + ], $tableOptions); + $this->addForeignKey('fki_tax_option_tax_group_id', 'tax_option', 'tax_group_id', 'tax_group', 'tax_group_id', 'CASCADE', 'CASCADE'); + + $this->createTable('{{%tax_group_to_group}}', [ + 'tax_group1_id' => $this->integer()->notNull(), + 'tax_group2_id' => $this->integer()->notNull(), + 'alias' => $this->string(50)->notNull(), + 'sort' => $this->integer(), + ], $tableOptions); + $this->addForeignKey('fki_tax_group_to_group1', 'tax_group_to_group', 'tax_group1_id', 'tax_group', 'tax_group_id', 'CASCADE', 'CASCADE'); + $this->addForeignKey('fki_tax_group_to_group2', 'tax_group_to_group', 'tax_group2_id', 'tax_group', 'tax_group_id', 'CASCADE', 'CASCADE'); + $this->addPrimaryKey('pki_tax_group_to_group', 'tax_group_to_group', ['tax_group1_id', 'tax_group2_id', 'alias']); + + $this->createTable('{{%tax_option_to_group}}', [ + 'tax_option_id' => $this->integer()->notNull(), + 'tax_group_id' => $this->integer()->notNull(), + 'alias' => $this->string(50)->notNull(), + 'sort' => $this->integer(), + ], $tableOptions); + $this->addForeignKey('tax_option_to_group_option_id', 'tax_option_to_group', 'tax_option_id', 'tax_option', 'tax_option_id', 'CASCADE', 'CASCADE'); + $this->addForeignKey('tax_option_to_group_group_id', 'tax_option_to_group', 'tax_group_id', 'tax_group', 'tax_group_id', 'CASCADE', 'CASCADE'); + $this->addPrimaryKey('pki_tax_option_to_group', 'tax_option_to_group', ['tax_option_id', 'tax_group_id', 'alias']); + + $this->createTable('{{%tax_option_to_option}}', [ + 'tax_option1_id' => $this->integer()->notNull(), + 'tax_option2_id' => $this->integer()->notNull(), + 'alias' => $this->string(50)->notNull(), + 'sort' => $this->integer(), + ], $tableOptions); + $this->addForeignKey('fki_tax_option_to_option1', 'tax_option_to_option', 'tax_option1_id', 'tax_option', 'tax_option_id', 'CASCADE', 'CASCADE'); + $this->addForeignKey('fki_tax_option_to_option2', 'tax_option_to_option', 'tax_option2_id', 'tax_option', 'tax_option_id', 'CASCADE', 'CASCADE'); + $this->addPrimaryKey('pki_tax_option_to_option', 'tax_option_to_option', ['tax_option1_id', 'tax_option2_id', 'alias']); + + /*$this->createTable('{{%tax_entity_relation}}', [ + 'tax_option_id' => $this->integer()->notNull(), + 'entity_id' => $this->integer()->notNull(), + 'entity_table_name' => $this->string(50)->notNull(), + 'entity_key_name' => $this->string(50)->notNull(), + 'alias' => $this->string(50)->notNull(), + ], $tableOptions); + $this->addForeignKey('fki_tax_entity_relation_option_id', 'tax_entity_relation', 'tax_option_id', 'tax_option', 'tax_option_id', 'CASCADE', 'CASCADE'); + $this->addPrimaryKey('pki_tax_entity_relation', 'tax_entity_relation', ['tax_option_id', 'entity_id', 'entity_table_name', 'entity_key_name', 'alias']);*/ + + $this->createTable('{{%tax_value_int}}', [ + 'tax_value_id' => $this->primaryKey(), + 'tax_option_id' => $this->integer()->notNull(), + 'value' => $this->integer(), + ], $tableOptions); + $this->addForeignKey('fki_tax_value_int_option_id', 'tax_value_int', 'tax_option_id', 'tax_option', 'tax_option_id', 'CASCADE', 'CASCADE'); + + $this->createTable('{{%tax_value_string}}', [ + 'tax_value_id' => $this->primaryKey(), + 'tax_option_id' => $this->integer()->notNull(), + 'value' => $this->string(), + ], $tableOptions); + $this->addForeignKey('fki_tax_value_string_option_id', 'tax_value_string', 'tax_option_id', 'tax_option', 'tax_option_id', 'CASCADE', 'CASCADE'); + + $this->createTable('{{%tax_value_text}}', [ + 'tax_value_id' => $this->primaryKey(), + 'tax_option_id' => $this->integer()->notNull(), + 'value' => $this->text(), + ], $tableOptions); + $this->addForeignKey('fki_tax_value_text_option_id', 'tax_value_text', 'tax_option_id', 'tax_option', 'tax_option_id', 'CASCADE', 'CASCADE'); + + $this->createTable('{{%tax_value_float}}', [ + 'tax_value_id' => $this->bigPrimaryKey(), + 'tax_option_id' => $this->integer()->notNull(), + 'value' => $this->float(), + ], $tableOptions); + $this->addForeignKey('fki_tax_value_float_option_id', 'tax_value_float', 'tax_option_id', 'tax_option', 'tax_option_id', 'CASCADE', 'CASCADE'); + } + + public function safeDown() + { + $this->dropTable('{{%tax_value_int}}'); + $this->dropTable('{{%tax_value_string}}'); + $this->dropTable('{{%tax_value_text}}'); + $this->dropTable('{{%tax_value_float}}'); +// $this->dropTable('{{%tax_entity_relation}}'); + $this->dropTable('{{%tax_group_to_group}}'); + $this->dropTable('{{%tax_option_to_group}}'); + $this->dropTable('{{%tax_option_to_option}}'); + $this->dropTable('{{%tax_option}}'); + $this->dropTable('{{%tax_group}}'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160128_101543_fields.php b/console/migrations/m160128_101543_fields.php new file mode 100755 index 0000000..0c6b960 --- /dev/null +++ b/console/migrations/m160128_101543_fields.php @@ -0,0 +1,29 @@ +createTable('{{%fields}}', [ + 'id' => $this->primaryKey(), + 'table_name' => $this->string(255)->notNull(), + 'table_id' => $this->integer(), + 'value' => $this->string(255), + 'field_name' => $this->string(), + 'field_type' => $this->string(32)->notNull(), + 'language' => $this->string(3), + 'key' => $this->integer(), + 'parent_key' => $this->integer() + ], $tableOptions); + + } + + public function down() + { + $this->dropTable('{{%fields}}'); + } +} diff --git a/console/migrations/m160208_111900_blog.php b/console/migrations/m160208_111900_blog.php new file mode 100755 index 0000000..12bcf1d --- /dev/null +++ b/console/migrations/m160208_111900_blog.php @@ -0,0 +1,30 @@ +createTable('{{%blog}}', [ + 'blog_id' => $this->primaryKey(), + 'user_id' => $this->integer()->notNull(), + 'name' => $this->string(255)->notNull(), + 'link' => $this->string(255), + 'date_add' => $this->timestamp()->notNull(), + 'user_add_id' => $this->integer(), + 'view_count' => $this->integer()->defaultValue(0), + 'description' => $this->text(), + 'cover' => $this->string(255), + ], $tableOptions); + + } + + public function down() + { + $this->dropTable('{{%blog}}'); + } + +} diff --git a/console/migrations/m160304_054017_realtion.php b/console/migrations/m160304_054017_realtion.php new file mode 100755 index 0000000..f1fe66b --- /dev/null +++ b/console/migrations/m160304_054017_realtion.php @@ -0,0 +1,44 @@ +db->driverName === 'mysql') { + // Only for MySQL + $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; + + // @todo https://habrahabr.ru/post/138947/ + } elseif ($this->db->driverName === 'pgsql') { + // Only for PostgreSQL + // @todo use intarray field for tax_options + } + $this->createTable('{{%relation}}', [ + 'alias' => $this->string(50)->notNull(), + 'entity1_id' => $this->integer()->notNull(), + 'entity2_id' => $this->integer()->notNull(), + ], $tableOptions); + $this->addPrimaryKey('relation_ukey', 'relation', ['alias', 'entity1_id', 'entity2_id']); + } + + public function down() + { + $this->dropTable('{{%relation}}'); + + return false; + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160304_065108_product.php b/console/migrations/m160304_065108_product.php new file mode 100755 index 0000000..41a175c --- /dev/null +++ b/console/migrations/m160304_065108_product.php @@ -0,0 +1,135 @@ +db->driverName === 'mysql') { + // Only for MySQL + $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; + + // @todo https://habrahabr.ru/post/138947/ + } elseif ($this->db->driverName === 'pgsql') { + // Only for PostgreSQL + // @todo use intarray field for tax_options + } + + $this->createTable('{{%category_name}}', [ + 'category_name_id' => $this->primaryKey(), + 'category_id' => $this->integer()->notNull(), + 'value' => $this->string(250), + ], $tableOptions); + + $this->createTable('{{%category}}', [ + 'category_id' => $this->primaryKey(), + 'parent_id' => $this->integer()->notNull()->defaultValue(0), + 'path' => 'INT[]', + 'depth' => $this->integer()->notNull()->defaultValue(0), + 'alias' => $this->string(250), + 'image' => $this->string(255), + 'meta_title' => $this->string(255), + 'meta_desc' => $this->text(), + 'meta_robots' => $this->string(50), + 'seo_text' => $this->text(), + 'category_name_id' => $this->integer(), + 'product_unit_id' => $this->integer() + ], $tableOptions); + + $this->addForeignKey('category_name_fkey', 'category', 'category_name_id', 'category_name', 'category_name_id', 'CASCADE', 'CASCADE'); + $this->addForeignKey('category_name_category_fkey', 'category_name', 'category_id', 'category', 'category_id', 'NO ACTION', 'NO ACTION'); + + $this->createTable('{{%product_category}}', [ + 'product_id' => $this->integer()->notNull(), + 'category_id' => $this->integer()->notNull(), + ], $tableOptions); + + $this->createTable('{{%brand_name}}', [ + 'brand_name_id' => $this->primaryKey(), + 'brand_id' => $this->integer()->notNull(), + 'value' => $this->string(250), + ], $tableOptions); + + $this->createTable('{{%brand}}', [ + 'brand_id' => $this->primaryKey(), + 'brand_name_id' => $this->integer(), + 'alias' => $this->string(250), + 'image' => $this->string(255), + 'meta_title' => $this->string(255), + 'meta_desc' => $this->text(), + 'meta_robots' => $this->string(50), + 'seo_text' => $this->text(), + ], $tableOptions); + + $this->addForeignKey('brand_name_fkey', 'brand', 'brand_name_id', 'brand_name', 'brand_name_id', 'CASCADE', 'CASCADE'); + $this->addForeignKey('brand_name_brand_fkey', 'brand_name', 'brand_id', 'brand', 'brand_id', 'NO ACTION', 'NO ACTION'); + + $this->createTable('{{%product}}', [ + 'product_id' => $this->primaryKey(), + 'name' => $this->string(255)->notNull(), + 'alias' => $this->string(255), + 'brand_id' => $this->integer(), + 'description' => $this->text(), + 'video' => $this->text(), + ], $tableOptions); + + $this->addForeignKey('fki_product_id', 'product_category', 'product_id', 'product', 'product_id', 'NO ACTION', 'NO ACTION'); + $this->addForeignKey('fki_category_id', 'product_category', 'category_id', 'category', 'category_id', 'NO ACTION', 'NO ACTION'); + $this->addForeignKey('fki_brand_id', 'product', 'brand_id', 'brand', 'brand_id', 'NO ACTION', 'CASCADE'); + + $this->createTable('{{%product_variant}}', [ + 'product_variant_id' => $this->primaryKey(), + 'product_id' => $this->integer()->notNull(), + 'name' => $this->string(255)->notNull(), + 'sku' => $this->string(255)->notNull(), + 'price' => $this->float(), + 'price_old' => $this->float(), + 'stock' => $this->float(), + 'product_unit_id' => $this->integer()->notNull(), + ], $tableOptions); + + $this->createTable('{{%product_unit}}', [ + 'product_unit_id' => $this->primaryKey(), + 'name' => $this->string(255)->notNull(), + 'code' => $this->string(50)->notNull(), + 'is_default' => $this->boolean() + ], $tableOptions); +// + $this->addForeignKey('product_variant_product_unit_fkey', 'product_variant', 'product_unit_id', 'product_unit', 'product_unit_id', 'CASCADE', 'NO ACTION'); + $this->addForeignKey('category_product_unit_fkey', 'category', 'product_unit_id', 'product_unit', 'product_unit_id', 'NO ACTION', 'NO ACTION'); + } + + public function down() + { + $this->dropForeignKey('category_name_fkey', 'category'); + $this->dropForeignKey('category_name_category_fkey', 'category_name'); + $this->dropForeignKey('brand_name_fkey', 'brand'); + $this->dropForeignKey('brand_name_brand_fkey', 'brand_name'); + $this->dropForeignKey('fki_product_id', 'product_category'); + $this->dropForeignKey('fki_category_id', 'product_category'); + $this->dropForeignKey('fki_brand_id', 'product'); + $this->dropForeignKey('product_variant_product_unit_fkey', 'product_variant'); + $this->dropForeignKey('category_product_unit_fkey', 'category'); + $this->dropTable('{{%category}}'); + $this->dropTable('{{%category_name}}'); + $this->dropTable('{{%product_category}}'); + $this->dropTable('{{%product}}'); + $this->dropTable('{{%product_variant}}'); + $this->dropTable('{{%product_unit}}'); + $this->dropTable('{{%brand_name}}'); + $this->dropTable('{{%brand}}'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160320_174258_customer.php b/console/migrations/m160320_174258_customer.php new file mode 100755 index 0000000..172287b --- /dev/null +++ b/console/migrations/m160320_174258_customer.php @@ -0,0 +1,35 @@ +db->driverName === 'mysql') { + // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci + $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; + } + + $this->createTable('{{%customers}}', [ + 'id' => $this->primaryKey(), + 'username' => $this->string()->notNull(), + 'surname' => $this->string(), + 'auth_key' => $this->string(32)->notNull(), + 'password_hash' => $this->string()->notNull(), + 'password_reset_token' => $this->string()->unique(), + 'email' => $this->string()->notNull()->unique(), + 'phone' => $this->string()->notNull()->unique(), + 'status' => $this->smallInteger()->notNull()->defaultValue(10), + 'created_at' => $this->integer()->notNull(), + 'updated_at' => $this->integer()->notNull(), + ], $tableOptions); + } + + public function down() + { + $this->dropTable('{{%customers}}'); + } + +} diff --git a/console/migrations/m160323_234304_product_image.php b/console/migrations/m160323_234304_product_image.php new file mode 100755 index 0000000..9b5a4f0 --- /dev/null +++ b/console/migrations/m160323_234304_product_image.php @@ -0,0 +1,45 @@ +db->driverName === 'mysql') { + // Only for MySQL + $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; + + // @todo https://habrahabr.ru/post/138947/ + } elseif ($this->db->driverName === 'pgsql') { + // Only for PostgreSQL + // @todo use intarray field for tax_options + } + + $this->createTable('{{%product_image}}', [ + 'product_image_id' => $this->integer()->notNull(), + 'product_id' => $this->integer()->notNull(), + 'image' => $this->string(255), + 'alt' => $this->string(255), + 'title' => $this->string(255), + ], $tableOptions); + $this->addForeignKey('product_image_product_fkey', 'product_image', 'product_id', 'product', 'product_id', 'CASCADE', 'CASCADE'); + } + + public function down() + { + $this->dropTable('{{%product_image}}'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160324_075409_product_option.php b/console/migrations/m160324_075409_product_option.php new file mode 100755 index 0000000..54f0373 --- /dev/null +++ b/console/migrations/m160324_075409_product_option.php @@ -0,0 +1,44 @@ +db->driverName === 'mysql') { + // Only for MySQL + $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; + + // @todo https://habrahabr.ru/post/138947/ + } elseif ($this->db->driverName === 'pgsql') { + // Only for PostgreSQL + // @todo use intarray field for tax_options + } + + $this->createTable('{{%product_option}}', [ + 'product_id' => $this->integer()->notNull(), + 'option_id' => $this->integer()->notNull(), + ], $tableOptions); + $this->addPrimaryKey('product_option_pkey', 'product_option', ['product_id', 'option_id']); + $this->addForeignKey('product_option_product_fkey', 'product_option', 'product_id', 'product', 'product_id', 'NO ACTION', 'NO ACTION'); + $this->addForeignKey('product_option_option_fkey', 'product_option', 'option_id', 'tax_option', 'tax_option_id', 'NO ACTION', 'NO ACTION'); + } + + public function down() + { + $this->dropTable('{{%product_option}}'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160324_114404_orders_items_items_fk.php b/console/migrations/m160324_114404_orders_items_items_fk.php new file mode 100755 index 0000000..997b0ae --- /dev/null +++ b/console/migrations/m160324_114404_orders_items_items_fk.php @@ -0,0 +1,21 @@ +dropForeignKey('orders_items_items_fk', '{{%order_items}}'); + $this->addForeignKey('orders_items_items_fk', '{{%order_items}}', 'item_id', '{{%product_variant}}', 'product_variant_id', 'RESTRICT', 'RESTRICT'); + } + + public function down() + { + $this->dropForeignKey('orders_items_items_fk', '{{%order_items}}'); + $this->addForeignKey('orders_items_items_fk', '{{%order_items}}', 'item_id', '{{%product}}', 'product_id', 'RESTRICT', 'RESTRICT'); + + } + +} diff --git a/console/migrations/m160331_132149_slider.php b/console/migrations/m160331_132149_slider.php new file mode 100755 index 0000000..8113dec --- /dev/null +++ b/console/migrations/m160331_132149_slider.php @@ -0,0 +1,26 @@ +createTable('{{%slider}}', [ + 'slider_id' => $this->primaryKey(), + 'speed' => $this->integer(4), + 'duration' => $this->integer(4), + 'title' => $this->string(200), + 'status' => $this->smallInteger(1), + 'width' => $this->integer(4), + 'height' => $this->integer(4), + ]); + } + + public function down() + { + $this->dropTable('{{%slider}}'); + } + + +} diff --git a/console/migrations/m160404_081649_banner.php b/console/migrations/m160404_081649_banner.php new file mode 100755 index 0000000..29a67a8 --- /dev/null +++ b/console/migrations/m160404_081649_banner.php @@ -0,0 +1,26 @@ +createTable('{{%banner}}', [ + 'banner_id' => $this->primaryKey(), + 'image' => $this->string(255), + 'alt' => $this->string(255), + 'title' => $this->string(255), + 'url' => $this->string(255), + 'status' => $this->smallInteger(1), + 'width' => $this->integer(4), + 'height' => $this->integer(4), + ]); + } + + public function down() + { + $this->dropTable('{{%banner}}'); + } + +} diff --git a/console/migrations/m160405_101056_create_slider_images.php b/console/migrations/m160405_101056_create_slider_images.php new file mode 100755 index 0000000..6259c3b --- /dev/null +++ b/console/migrations/m160405_101056_create_slider_images.php @@ -0,0 +1,37 @@ +createTable('slider_image', [ + 'slider_image_id' => $this->primaryKey(), + 'slider_id' => $this->integer(), + 'image' => $this->string(255), + 'alt' => $this->string(255), + 'title' => $this->string(255), + 'url' => $this->string(255), + 'status' => $this->smallInteger(1), + 'sort' => $this->integer(6), + 'price' => $this->float(), + ]); + $this->addForeignKey('slider_slider_image_fk', 'slider_image', 'slider_id', 'slider', 'slider_id', 'CASCADE', 'CASCADE'); + } + + /** + * @inheritdoc + */ + public function down() + { + $this->dropForeignKey('slider_slider_image_fk', '{{%slider_image}}'); + $this->dropTable('slider_image'); + } +} diff --git a/console/migrations/m160406_221846_create_page.php b/console/migrations/m160406_221846_create_page.php new file mode 100755 index 0000000..230ba43 --- /dev/null +++ b/console/migrations/m160406_221846_create_page.php @@ -0,0 +1,48 @@ +createTable('page', [ + 'id' => $this->primaryKey(), + 'name'=> $this->string(), + 'alias'=> $this->string(), + 'title' => $this->string(), + 'body'=> $this->text(), + 'meta_title'=> $this->string(), + 'description' => $this->string(), + 'h1'=> $this->string(), + 'seo_text'=> $this->text(), + + ]); + } + + /** + * @inheritdoc + */ + public function down() + { + $this->dropTable('page'); + } +} diff --git a/console/migrations/m160407_185510_create_event.php b/console/migrations/m160407_185510_create_event.php new file mode 100755 index 0000000..9d0973f --- /dev/null +++ b/console/migrations/m160407_185510_create_event.php @@ -0,0 +1,38 @@ +createTable('event', [ + 'event_id' => $this->primaryKey(), + 'name'=> $this->string(), + 'alias'=> $this->string(), + 'body'=> $this->text(), + 'image' => $this->string(), + 'meta_title'=> $this->string(), + 'description' => $this->string(), + 'h1'=> $this->string(), + 'seo_text'=> $this->text(), + 'created_at' => $this->integer(), + 'updated_at' => $this->integer(), + 'end_at' => $this->integer(), + ]); + } + + /** + * @inheritdoc + */ + public function down() + { + $this->dropTable('event'); + } +} diff --git a/console/migrations/m160411_211053_create_service.php b/console/migrations/m160411_211053_create_service.php new file mode 100755 index 0000000..4097776 --- /dev/null +++ b/console/migrations/m160411_211053_create_service.php @@ -0,0 +1,37 @@ +createTable('service', [ + 'service_id' => $this->primaryKey(), + 'name'=> $this->string()->notNull(), + 'alias'=> $this->string(), + 'body'=> $this->text()->notNull(), + 'image' => $this->string(), + 'meta_title'=> $this->string(), + 'description' => $this->string(), + 'h1'=> $this->string(), + 'seo_text'=> $this->text(), + 'created_at' => $this->integer(), + 'updated_at' => $this->integer(), + ]); + } + + /** + * @inheritdoc + */ + public function down() + { + $this->dropTable('service'); + } +} diff --git a/console/migrations/m160411_215739_create_seo.php b/console/migrations/m160411_215739_create_seo.php new file mode 100755 index 0000000..713653f --- /dev/null +++ b/console/migrations/m160411_215739_create_seo.php @@ -0,0 +1,33 @@ +createTable('seo', [ + 'seo_id' => $this->primaryKey(), + 'url'=> $this->string()->notNull(), + 'title'=> $this->string(), + 'description' => $this->string(), + 'h1'=> $this->string(), + 'seo_text'=> $this->text(), + + ]); + } + + /** + * @inheritdoc + */ + public function down() + { + $this->dropTable('seo'); + } +} diff --git a/console/migrations/m160412_133944_create_seo_category.php b/console/migrations/m160412_133944_create_seo_category.php new file mode 100755 index 0000000..3145f2a --- /dev/null +++ b/console/migrations/m160412_133944_create_seo_category.php @@ -0,0 +1,30 @@ +createTable('seo_category', [ + 'seo_category_id' => $this->primaryKey(), + 'name' => $this->string(), + 'controller' => $this->string(100), + 'status' => $this->smallInteger(1), + ]); + } + + /** + * @inheritdoc + */ + public function down() + { + $this->dropTable('seo_category'); + } +} diff --git a/console/migrations/m160413_112158_create_seo_dynamic.php b/console/migrations/m160413_112158_create_seo_dynamic.php new file mode 100755 index 0000000..41ce24e --- /dev/null +++ b/console/migrations/m160413_112158_create_seo_dynamic.php @@ -0,0 +1,39 @@ +createTable('seo_dynamic', [ + 'seo_dynamic_id' => $this->primaryKey(), + 'seo_category_id' => $this->integer(), + 'name' => $this->string(200), + 'action' => $this->string(200), + 'fields' => $this->string(), + 'title' => $this->string(), + 'h1' => $this->string(), + 'description' => $this->string(), + 'seo_text' => $this->text(), + 'status' => $this->smallInteger() + ]); + + $this->addForeignKey('seo_category_seo_dynamic_fk', 'seo_dynamic', 'seo_category_id', 'seo_category', 'seo_category_id', 'CASCADE', 'CASCADE'); + } + + /** + * @inheritdoc + */ + public function down() + { + $this->dropForeignKey('seo_category_seo_dynamic_fk', '{{%seo_dynamic}}'); + $this->dropTable('seo_dynamic'); + } +} diff --git a/console/migrations/m160414_101644_add_param_to_seo_dynamic.php b/console/migrations/m160414_101644_add_param_to_seo_dynamic.php new file mode 100755 index 0000000..59d896f --- /dev/null +++ b/console/migrations/m160414_101644_add_param_to_seo_dynamic.php @@ -0,0 +1,26 @@ +addColumn('seo_dynamic', 'param', $this->string()); + } + + /** + * @inheritdoc + */ + public function down() + { + $this->dropColumn('seo_dynamic', 'param'); + } +} diff --git a/console/migrations/m160414_214745_add_key_to_seo_dynamic.php b/console/migrations/m160414_214745_add_key_to_seo_dynamic.php new file mode 100755 index 0000000..14780b1 --- /dev/null +++ b/console/migrations/m160414_214745_add_key_to_seo_dynamic.php @@ -0,0 +1,26 @@ +addColumn('seo_dynamic', 'key', $this->string()); + } + + /** + * @inheritdoc + */ + public function down() + { + $this->dropColumn('seo_dynamic', 'key'); + } +} diff --git a/console/migrations/m160414_214746_add_level_to_tax_group.php b/console/migrations/m160414_214746_add_level_to_tax_group.php new file mode 100755 index 0000000..a44ba08 --- /dev/null +++ b/console/migrations/m160414_214746_add_level_to_tax_group.php @@ -0,0 +1,26 @@ +addColumn('tax_group', 'level', $this->integer()); + } + + /** + * @inheritdoc + */ + public function down() + { + $this->dropColumn('tax_group', 'level'); + } +} diff --git a/console/migrations/m160505_202248_bg.php b/console/migrations/m160505_202248_bg.php new file mode 100755 index 0000000..99a5944 --- /dev/null +++ b/console/migrations/m160505_202248_bg.php @@ -0,0 +1,23 @@ +createTable('bg', [ + 'id' => $this->primaryKey(), + 'title' => $this->string(250)->notNull(), + 'url' => $this->string(250)->notNull(), + 'image' => $this->string(250)->notNull(), + ]); + } + + public function down() + { + $this->dropTable('bg'); + } + + +} diff --git a/console/migrations/m160505_235100_page.php b/console/migrations/m160505_235100_page.php new file mode 100755 index 0000000..689069e --- /dev/null +++ b/console/migrations/m160505_235100_page.php @@ -0,0 +1,49 @@ +createTable('page', [ + 'id' => $this->primaryKey(), + 'translit'=> $this->string(), + 'title'=> $this->string(), + 'body'=> $this->text(), + 'meta_title'=> $this->string(), + 'meta_keywords' => $this->string(), + 'meta_description'=> $this->string(), + 'seo_text'=> $this->text(), + 'h1'=> $this->string(), + + ]); + } + + /** + * @inheritdoc + */ + public function down() + { + $this->dropTable('page'); + } +} \ No newline at end of file diff --git a/console/migrations/m160509_121023_articles.php b/console/migrations/m160509_121023_articles.php new file mode 100755 index 0000000..de97e32 --- /dev/null +++ b/console/migrations/m160509_121023_articles.php @@ -0,0 +1,40 @@ +createTable('articles', [ + 'id' => $this->primaryKey(), + 'date'=> $this->date(), + 'title'=> $this->string()->notNull(), + 'body'=> $this->text()->notNull(), + 'image'=> $this->string()->notNull(), + 'translit'=> $this->string()->notNull(), + 'meta_title'=> $this->string(), + 'meta_keywords' => $this->string(), + 'meta_description'=> $this->string(), + 'seo_text'=> $this->text(), + 'h1'=> $this->string(), + + ]); + } + + public function down() + { + $this->dropTable('articles'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160509_214535_customer.php b/console/migrations/m160509_214535_customer.php new file mode 100755 index 0000000..21066ab --- /dev/null +++ b/console/migrations/m160509_214535_customer.php @@ -0,0 +1,44 @@ +createTable('{{%customer}}', [ + + + 'id' => $this->primaryKey(), + 'username' => $this->string()->notNull(), + 'password' => $this->string()->notNull(), + 'name' => $this->string()->notNull(), + 'surname' => $this->string(), + 'phone' => $this->string(), + 'date_time' => $this->date()->defaultExpression('NOW()'), + 'sex' => $this->string(32), + 'birth_day' => $this->integer(), + 'birth_month' => $this->integer(), + 'birth_year' => $this->integer(), + 'body' => $this->text(), + 'group_id' => $this->integer(), + ]); + } + + public function down() + { + $this->dropTable('{{%customer}}'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160509_231345_auth_assignment.php b/console/migrations/m160509_231345_auth_assignment.php new file mode 100755 index 0000000..737bff1 --- /dev/null +++ b/console/migrations/m160509_231345_auth_assignment.php @@ -0,0 +1,33 @@ +createTable('{{%auth_assignment}}', [ + + + 'item_name' => $this->string(), + 'user_id' => $this->integer(), + 'created_at' => $this->integer(), + ]); + } + + public function down() + { + $this->dropTable('{{%auth_assignment}}'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160512_153443_subscribe.php b/console/migrations/m160512_153443_subscribe.php new file mode 100755 index 0000000..2520be3 --- /dev/null +++ b/console/migrations/m160512_153443_subscribe.php @@ -0,0 +1,24 @@ +createTable('{{%subscribe}}', [ + + + 'id' => $this->primaryKey(), + 'email' => $this->string()->notNull(), + 'sale' => $this->integer()->notNull(), + 'sand' => $this->smallInteger()->notNull()->defaultValue(0), + ]); + } + + public function down() + { + $this->dropTable('{{%subscribe}}'); + } + +} diff --git a/console/migrations/m160516_222821_orders.php b/console/migrations/m160516_222821_orders.php new file mode 100755 index 0000000..80bf1ab --- /dev/null +++ b/console/migrations/m160516_222821_orders.php @@ -0,0 +1,72 @@ +db->driverName === 'mysql') { + // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci + $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; + } + + + $this->createTable('{{%orders}}', [ + 'id' => $this->primaryKey(), + 'user_id' => $this->integer(), + 'name' => $this->string()->notNull(), + 'surname' => $this->string()->notNull(), + 'patronymic' => $this->string()->notNull(), + 'phone' => $this->string(), + 'phone2' => $this->string(), + 'email' => $this->string(), + 'adress' => $this->string(), + 'body' => $this->text(), + 'total' => $this->float(), + 'date_time' => $this->dateTime(), + 'date_dedline' => $this->date(), + 'reserve' => $this->string(), + 'status' => $this->string(), + 'comment' => $this->text(), + 'label' => $this->integer(), + 'pay' => $this->integer(), + 'numbercard' => $this->integer(), + 'delivery' => $this->string(), + 'declaration' => $this->string(), + 'stock' => $this->string(), + 'consignment' => $this->string(), + 'payment' => $this->string(), + 'insurance' => $this->string(), + 'amount_imposed' => $this->float(), + 'shipping_by' => $this->string(), + 'city' => $this->string(), + ], $tableOptions); + + + $this->createTable('{{%orders_products}}', [ + 'id' => $this->primaryKey(), + 'order_id' => $this->integer(), + 'mod_id' => $this->integer(), + 'product_name' => $this->string(), + 'name' => $this->string(), + 'sku' => $this->string(), + 'price' => $this->float(), + 'count' => $this->integer(), + 'sum_cost' => $this->float(), + ], $tableOptions); + + $this->addForeignKey('orders_products_fk', '{{%orders_products}}', 'order_id', '{{%orders}}', 'id', 'CASCADE', 'CASCADE'); + $this->addForeignKey('orders_products_items_fk', '{{%orders_products}}', 'id', '{{%product}}', 'product_id', 'RESTRICT', 'RESTRICT'); + } + + public function down() + { + $this->dropForeignKey('orders_products_fk', '{{%orders_products}}'); + $this->dropForeignKey('orders_products_items_fk', '{{%orders_products}}'); + $this->dropTable('{{%orders}}'); + $this->dropTable('{{%orders_products}}'); + } + +} \ No newline at end of file diff --git a/console/migrations/m160516_234753_orders_delivery.php b/console/migrations/m160516_234753_orders_delivery.php new file mode 100755 index 0000000..29cff5b --- /dev/null +++ b/console/migrations/m160516_234753_orders_delivery.php @@ -0,0 +1,38 @@ +createTable('{{%orders_delivery}}', [ + 'id' => $this->primaryKey(), + 'parent_id' => $this->integer(), + 'title' => $this->string(), + 'title_ukr' => $this->string(), + 'value' => $this->integer(), + 'text' => $this->text(), + 'text_ukr' => $this->text(), + 'sort' => $this->integer(), + ]); + + } + + public function down() + { + $this->dropTable('{{%orders_delivery}}'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160517_072059_delete_product_fk.php b/console/migrations/m160517_072059_delete_product_fk.php new file mode 100755 index 0000000..28972f9 --- /dev/null +++ b/console/migrations/m160517_072059_delete_product_fk.php @@ -0,0 +1,30 @@ +dropForeignKey('orders_products_fk', '{{%orders_products}}'); + $this->dropForeignKey('orders_products_items_fk', '{{%orders_products}}'); + } + + public function down() + { + + $this->addForeignKey('orders_products_fk', '{{%orders_products}}', 'order_id', '{{%orders}}', 'id', 'CASCADE', 'CASCADE'); + $this->addForeignKey('orders_products_items_fk', '{{%orders_products}}', 'id', '{{%product}}', 'product_id', 'RESTRICT', 'RESTRICT'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160517_073502_orders_label.php b/console/migrations/m160517_073502_orders_label.php new file mode 100755 index 0000000..104048e --- /dev/null +++ b/console/migrations/m160517_073502_orders_label.php @@ -0,0 +1,31 @@ +createTable('{{%orders_label}}', [ + 'id' => $this->primaryKey(), + 'name' => $this->string(), + 'label' => $this->string() + ]); + } + + public function down() + { + $this->dropTable('{{%orders_label}}'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160518_185644_change_order.php b/console/migrations/m160518_185644_change_order.php new file mode 100755 index 0000000..07dffdc --- /dev/null +++ b/console/migrations/m160518_185644_change_order.php @@ -0,0 +1,29 @@ +dropColumn('orders', 'surname'); + $this->dropColumn('orders', 'patronymic'); + } + + public function down() + { + $this->addColumn('orders', 'surname','string'); + $this->addColumn('orders', 'patronymic','string'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160721_152001_create_product_to_rating.php b/console/migrations/m160721_152001_create_product_to_rating.php new file mode 100755 index 0000000..5898e2f --- /dev/null +++ b/console/migrations/m160721_152001_create_product_to_rating.php @@ -0,0 +1,23 @@ +createTable('product_to_rating', [ + 'product_to_rating_id' => $this->primaryKey(), + 'product_id' => $this->integer()->notNull(), + 'value' => $this->float()->defaultValue(0), + ]); + + $this->addForeignKey('product_to_rating_product', 'product_to_rating', 'product_id', 'product', 'product_id', 'CASCADE', 'CASCADE'); + } + + public function down() + { + $this->dropForeignKey('product_to_rating_product', 'product_to_rating'); + $this->dropTable('product_to_rating'); + } +} diff --git a/console/migrations/m160722_150101_remove_product_option_option_fkey.php b/console/migrations/m160722_150101_remove_product_option_option_fkey.php new file mode 100755 index 0000000..9f60d86 --- /dev/null +++ b/console/migrations/m160722_150101_remove_product_option_option_fkey.php @@ -0,0 +1,19 @@ +dropForeignKey('product_option_option_fkey', '{{%product_option}}'); + + } + + public function down() + { + $this->addForeignKey('product_option_option_fkey', 'product_option', 'option_id', 'tax_option', 'tax_option_id', 'NO ACTION', 'NO ACTION'); + + } + +} diff --git a/console/migrations/m160722_150611_remove_product_variant_option_id.php b/console/migrations/m160722_150611_remove_product_variant_option_id.php new file mode 100755 index 0000000..babf023 --- /dev/null +++ b/console/migrations/m160722_150611_remove_product_variant_option_id.php @@ -0,0 +1,27 @@ +dropForeignKey('product_variant_option_id', '{{%product_variant_option}}'); + } + + public function down() + { + $this->addForeignKey('product_variant_option_id', 'product_variant_option', 'option_variant_id', 'tax_option', 'tax_option_id', 'NO ACTION', 'NO ACTION'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160722_150612_remove_option_product_variant_id.php b/console/migrations/m160722_150612_remove_option_product_variant_id.php new file mode 100755 index 0000000..213a477 --- /dev/null +++ b/console/migrations/m160722_150612_remove_option_product_variant_id.php @@ -0,0 +1,27 @@ +dropForeignKey('option_product_variant_id', '{{%product_variant_option}}'); + } + + public function down() + { + return false; + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160725_154511_remove_product_option_product_fkey.php b/console/migrations/m160725_154511_remove_product_option_product_fkey.php new file mode 100755 index 0000000..c59c6bb --- /dev/null +++ b/console/migrations/m160725_154511_remove_product_option_product_fkey.php @@ -0,0 +1,27 @@ +dropForeignKey('product_option_product_fkey', '{{%product_option}}'); + } + + public function down() + { + return false; + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160725_155127_remove_product_stock_product_variant_id_fkey.php b/console/migrations/m160725_155127_remove_product_stock_product_variant_id_fkey.php new file mode 100755 index 0000000..40eb68f --- /dev/null +++ b/console/migrations/m160725_155127_remove_product_stock_product_variant_id_fkey.php @@ -0,0 +1,27 @@ +dropForeignKey('product_stock_product_variant_id_fkey', '{{%product_stock}}'); + } + + public function down() + { + return false; + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160804_100209_create_article_to_rating.php b/console/migrations/m160804_100209_create_article_to_rating.php new file mode 100755 index 0000000..7d4ec15 --- /dev/null +++ b/console/migrations/m160804_100209_create_article_to_rating.php @@ -0,0 +1,23 @@ +createTable('article_to_rating', [ + 'article_to_rating_id' => $this->primaryKey(), + 'articles_id' => $this->integer()->notNull(), + 'value' => $this->float()->defaultValue(0), + ]); + + $this->addForeignKey('article_to_rating_article', 'article_to_rating', 'articles_id', 'articles', 'id', 'CASCADE', 'CASCADE'); + } + + public function down() + { + $this->dropForeignKey('article_to_rating_article', 'article_to_rating'); + $this->dropTable('article_to_rating'); + } +} diff --git a/console/migrations/m160810_074009_add_tax_option_sort.php b/console/migrations/m160810_074009_add_tax_option_sort.php new file mode 100755 index 0000000..9adaf71 --- /dev/null +++ b/console/migrations/m160810_074009_add_tax_option_sort.php @@ -0,0 +1,16 @@ +addColumn('tax_group', 'sort', $this->integer()->defaultValue(0)); + } + + public function down() + { + $this->dropColumn('tax_group', 'sort'); + } +} diff --git a/console/migrations/m160810_081231_add_tax_option_display.php b/console/migrations/m160810_081231_add_tax_option_display.php new file mode 100755 index 0000000..e21c4fe --- /dev/null +++ b/console/migrations/m160810_081231_add_tax_option_display.php @@ -0,0 +1,16 @@ +addColumn('tax_group', 'display', $this->boolean()->defaultValue(TRUE)); + } + + public function down() + { + $this->dropColumn('tax_group', 'display'); + } +} diff --git a/console/migrations/m160812_140415_tax_group_to_category.php b/console/migrations/m160812_140415_tax_group_to_category.php new file mode 100755 index 0000000..ce82660 --- /dev/null +++ b/console/migrations/m160812_140415_tax_group_to_category.php @@ -0,0 +1,25 @@ +createTable('tax_group_to_category', [ + 'tax_group_to_category_id' => $this->primaryKey(), + 'tax_group_id' => $this->integer()->notNull(), + 'category_id' => $this->integer()->notNull(), + ]); + + $this->addForeignKey('tax_group_fk', 'tax_group_to_category', 'tax_group_id', 'tax_group', 'tax_group_id', 'CASCADE', 'CASCADE'); + $this->addForeignKey('category_fk', 'tax_group_to_category', 'category_id', 'category', 'category_id', 'CASCADE', 'CASCADE'); + } + + public function down() + { + $this->dropForeignKey('tax_group_fk', 'tax_group_to_category'); + $this->dropForeignKey('category_fk', 'tax_group_to_category'); + $this->dropTable('tax_group_to_category'); + } +} diff --git a/console/migrations/m160815_101433_add_name_to_category.php b/console/migrations/m160815_101433_add_name_to_category.php new file mode 100755 index 0000000..fe3db3d --- /dev/null +++ b/console/migrations/m160815_101433_add_name_to_category.php @@ -0,0 +1,16 @@ +addColumn('category', 'name', $this->string(255)); + } + + public function down() + { + $this->dropColumn('category', 'name'); + } +} diff --git a/console/migrations/m160815_101441_add_name_to_brand.php b/console/migrations/m160815_101441_add_name_to_brand.php new file mode 100755 index 0000000..2fea94e --- /dev/null +++ b/console/migrations/m160815_101441_add_name_to_brand.php @@ -0,0 +1,16 @@ +addColumn('brand', 'name', $this->string(255)); + } + + public function down() + { + $this->dropColumn('brand', 'name'); + } +} diff --git a/console/migrations/m160905_154051_create_table_feedback.php b/console/migrations/m160905_154051_create_table_feedback.php new file mode 100755 index 0000000..1d07e1f --- /dev/null +++ b/console/migrations/m160905_154051_create_table_feedback.php @@ -0,0 +1,24 @@ +createTable('{{%feedback}}', [ + 'feedback_id' => $this->primaryKey(), + 'name' => $this->string(), + 'phone' => $this->string() + ->notNull(), + 'date_add' => $this->integer(), + 'ip' => $this->string(), + ]); + } + + public function down() + { + $this->dropTable('{{%feedback}}'); + } + } diff --git a/console/migrations/m160907_101042_events_to_products.php b/console/migrations/m160907_101042_events_to_products.php new file mode 100755 index 0000000..462a141 --- /dev/null +++ b/console/migrations/m160907_101042_events_to_products.php @@ -0,0 +1,35 @@ +createTable('events_to_products', [ + 'events_to_products_id' => $this->primaryKey(), + 'event_id' => $this->integer()->notNull(), + 'product_id' => $this->integer()->notNull(), + ]); + $this->addForeignKey('events_to_products_to_event_fk', 'events_to_products', 'event_id', 'event', 'event_id', 'CASCADE', 'CASCADE'); + $this->addForeignKey('events_to_products_to_product_fk', 'events_to_products', 'product_id', 'product', 'product_id', 'CASCADE', 'CASCADE'); + } + + public function down() + { + $this->dropForeignKey('events_to_products_to_event_fk', 'events_to_products'); + $this->dropForeignKey('events_to_products_to_product_fk', 'events_to_products'); + $this->dropTable('events_to_products'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160907_161750_event_add_status.php b/console/migrations/m160907_161750_event_add_status.php new file mode 100755 index 0000000..e13e505 --- /dev/null +++ b/console/migrations/m160907_161750_event_add_status.php @@ -0,0 +1,27 @@ +addColumn('event', 'status', $this->boolean()->defaultValue(TRUE)); + } + + public function down() + { + $this->dropColumn('event', 'status'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160908_162057_add_banner_to_event.php b/console/migrations/m160908_162057_add_banner_to_event.php new file mode 100755 index 0000000..3b5c1fc --- /dev/null +++ b/console/migrations/m160908_162057_add_banner_to_event.php @@ -0,0 +1,27 @@ +addColumn('event', 'banner', $this->string()); + } + + public function down() + { + $this->dropColumn('event', 'banner'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160912_212751_slider_image_add_end_at.php b/console/migrations/m160912_212751_slider_image_add_end_at.php new file mode 100755 index 0000000..0a0d482 --- /dev/null +++ b/console/migrations/m160912_212751_slider_image_add_end_at.php @@ -0,0 +1,27 @@ +addColumn('slider_image', 'end_at', $this->string()); + } + + public function down() + { + $this->dropColumn('slider_image', 'end_at'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160920_193158_add_isEvent_to_event.php b/console/migrations/m160920_193158_add_isEvent_to_event.php new file mode 100755 index 0000000..8f6cc7e --- /dev/null +++ b/console/migrations/m160920_193158_add_isEvent_to_event.php @@ -0,0 +1,27 @@ +addColumn('event', 'is_event', $this->boolean()); + } + + public function down() + { + $this->dropColumn('event', 'is_event'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m160920_193159_add_sale_percent_to_event.php b/console/migrations/m160920_193159_add_sale_percent_to_event.php new file mode 100755 index 0000000..0ec3a68 --- /dev/null +++ b/console/migrations/m160920_193159_add_sale_percent_to_event.php @@ -0,0 +1,29 @@ +addColumn('event', 'sale', $this->boolean()); + $this->addColumn('event', 'percent', $this->integer(5)); + } + + public function down() + { + $this->dropColumn('event', 'sale'); + $this->dropColumn('event', 'percent'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m161020_145858_product_variant_add_status.php b/console/migrations/m161020_145858_product_variant_add_status.php new file mode 100755 index 0000000..b3f9fac --- /dev/null +++ b/console/migrations/m161020_145858_product_variant_add_status.php @@ -0,0 +1,27 @@ +addColumn('product_variant', 'status', $this->integer(5)); + } + + public function down() + { + $this->dropColumn('product_variant', 'status'); + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/console/migrations/m161104_094427_filter_cache.php b/console/migrations/m161104_094427_filter_cache.php new file mode 100644 index 0000000..62a6056 --- /dev/null +++ b/console/migrations/m161104_094427_filter_cache.php @@ -0,0 +1,22 @@ +createTable('filter_cache', [ + 'id' => $this->primaryKey(), + 'options_key' => $this->integer(20), + 'category_id' => $this->integer(), + 'depth' => $this->integer(), + 'count' => $this->integer(), + ]); + } + + public function down() + { + $this->dropTable('filter_cache'); + } +} diff --git a/console/models/.gitkeep b/console/models/.gitkeep new file mode 100755 index 0000000..5e4debc --- /dev/null +++ b/console/models/.gitkeep @@ -0,0 +1 @@ +* diff --git a/console/runtime/.gitignore b/console/runtime/.gitignore new file mode 100755 index 0000000..a3a0c8b --- /dev/null +++ b/console/runtime/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/environments/dev/backend/config/main-local.php b/environments/dev/backend/config/main-local.php new file mode 100755 index 0000000..b909cc5 --- /dev/null +++ b/environments/dev/backend/config/main-local.php @@ -0,0 +1,25 @@ + [ + 'request' => [ + // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation + 'cookieValidationKey' => '', + ], + ], +]; + +if (!YII_ENV_TEST) { + // configuration adjustments for 'dev' environment + $config['bootstrap'][] = 'debug'; + $config['modules']['debug'] = [ + 'class' => 'yii\debug\Module', + ]; + + $config['bootstrap'][] = 'gii'; + $config['modules']['gii'] = [ + 'class' => 'yii\gii\Module', + ]; +} + +return $config; diff --git a/environments/dev/backend/config/params-local.php b/environments/dev/backend/config/params-local.php new file mode 100755 index 0000000..c1d2298 --- /dev/null +++ b/environments/dev/backend/config/params-local.php @@ -0,0 +1,3 @@ +run(); diff --git a/environments/dev/backend/web/index.php b/environments/dev/backend/web/index.php new file mode 100755 index 0000000..37d8378 --- /dev/null +++ b/environments/dev/backend/web/index.php @@ -0,0 +1,18 @@ +run(); diff --git a/environments/dev/common/config/main-local.php b/environments/dev/common/config/main-local.php new file mode 100755 index 0000000..45d5ebb --- /dev/null +++ b/environments/dev/common/config/main-local.php @@ -0,0 +1,20 @@ + [ + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=yii2advanced', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', + ], + 'mailer' => [ + 'class' => 'yii\swiftmailer\Mailer', + 'viewPath' => '@common/mail', + // send all mails to a file by default. You have to set + // 'useFileTransport' to false and configure a transport + // for the mailer to send real emails. + 'useFileTransport' => true, + ], + ], +]; diff --git a/environments/dev/common/config/params-local.php b/environments/dev/common/config/params-local.php new file mode 100755 index 0000000..c1d2298 --- /dev/null +++ b/environments/dev/common/config/params-local.php @@ -0,0 +1,3 @@ + ['gii'], + 'modules' => [ + 'gii' => 'yii\gii\Module', + ], +]; diff --git a/environments/dev/console/config/params-local.php b/environments/dev/console/config/params-local.php new file mode 100755 index 0000000..c1d2298 --- /dev/null +++ b/environments/dev/console/config/params-local.php @@ -0,0 +1,3 @@ + [ + 'request' => [ + // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation + 'cookieValidationKey' => '', + ], + ], +]; + +if (!YII_ENV_TEST) { + // configuration adjustments for 'dev' environment + $config['bootstrap'][] = 'debug'; + $config['modules']['debug'] = [ + 'class' => 'yii\debug\Module', + ]; + $config['bootstrap'][] = 'gii'; + $config['modules']['gii'] = [ + 'class' => 'yii\gii\Module', + ]; +} + +return $config; diff --git a/environments/dev/frontend/config/params-local.php b/environments/dev/frontend/config/params-local.php new file mode 100755 index 0000000..c1d2298 --- /dev/null +++ b/environments/dev/frontend/config/params-local.php @@ -0,0 +1,3 @@ +run(); diff --git a/environments/dev/frontend/web/index.php b/environments/dev/frontend/web/index.php new file mode 100755 index 0000000..37d8378 --- /dev/null +++ b/environments/dev/frontend/web/index.php @@ -0,0 +1,18 @@ +run(); diff --git a/environments/dev/yii b/environments/dev/yii new file mode 100755 index 0000000..f3b4c13 --- /dev/null +++ b/environments/dev/yii @@ -0,0 +1,28 @@ +#!/usr/bin/env php +run(); +exit($exitCode); diff --git a/environments/index.php b/environments/index.php new file mode 100755 index 0000000..286620b --- /dev/null +++ b/environments/index.php @@ -0,0 +1,65 @@ + [ + * 'path' => 'directory storing the local files', + * 'skipFiles' => [ + * // list of files that should only copied once and skipped if they already exist + * ], + * 'setWritable' => [ + * // list of directories that should be set writable + * ], + * 'setExecutable' => [ + * // list of files that should be set executable + * ], + * 'setCookieValidationKey' => [ + * // list of config files that need to be inserted with automatically generated cookie validation keys + * ], + * 'createSymlink' => [ + * // list of symlinks to be created. Keys are symlinks, and values are the targets. + * ], + * ], + * ]; + * ``` + */ +return [ + 'Development' => [ + 'path' => 'dev', + 'setWritable' => [ + 'backend/runtime', + 'backend/web/assets', + 'frontend/runtime', + 'frontend/web/assets', + ], + 'setExecutable' => [ + 'yii', + 'tests/codeception/bin/yii', + ], + 'setCookieValidationKey' => [ + 'backend/config/main-local.php', + 'frontend/config/main-local.php', + ], + ], + 'Production' => [ + 'path' => 'prod', + 'setWritable' => [ + 'backend/runtime', + 'backend/web/assets', + 'frontend/runtime', + 'frontend/web/assets', + ], + 'setExecutable' => [ + 'yii', + ], + 'setCookieValidationKey' => [ + 'backend/config/main-local.php', + 'frontend/config/main-local.php', + ], + ], +]; diff --git a/environments/prod/backend/config/main-local.php b/environments/prod/backend/config/main-local.php new file mode 100755 index 0000000..d1c8993 --- /dev/null +++ b/environments/prod/backend/config/main-local.php @@ -0,0 +1,9 @@ + [ + 'request' => [ + // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation + 'cookieValidationKey' => '', + ], + ], +]; diff --git a/environments/prod/backend/config/params-local.php b/environments/prod/backend/config/params-local.php new file mode 100755 index 0000000..c1d2298 --- /dev/null +++ b/environments/prod/backend/config/params-local.php @@ -0,0 +1,3 @@ +run(); diff --git a/environments/prod/common/config/main-local.php b/environments/prod/common/config/main-local.php new file mode 100755 index 0000000..ea8ef35 --- /dev/null +++ b/environments/prod/common/config/main-local.php @@ -0,0 +1,16 @@ + [ + 'db' => [ + 'class' => 'yii\db\Connection', + 'dsn' => 'mysql:host=localhost;dbname=yii2advanced', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', + ], + 'mailer' => [ + 'class' => 'yii\swiftmailer\Mailer', + 'viewPath' => '@common/mail', + ], + ], +]; diff --git a/environments/prod/common/config/params-local.php b/environments/prod/common/config/params-local.php new file mode 100755 index 0000000..c1d2298 --- /dev/null +++ b/environments/prod/common/config/params-local.php @@ -0,0 +1,3 @@ + [ + 'request' => [ + // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation + 'cookieValidationKey' => '', + ], + ], +]; diff --git a/environments/prod/frontend/config/params-local.php b/environments/prod/frontend/config/params-local.php new file mode 100755 index 0000000..c1d2298 --- /dev/null +++ b/environments/prod/frontend/config/params-local.php @@ -0,0 +1,3 @@ +run(); diff --git a/environments/prod/yii b/environments/prod/yii new file mode 100755 index 0000000..65c41d0 --- /dev/null +++ b/environments/prod/yii @@ -0,0 +1,28 @@ +#!/usr/bin/env php +run(); +exit($exitCode); diff --git a/frontend/assets/AppAsset.php b/frontend/assets/AppAsset.php new file mode 100755 index 0000000..2ec62a7 --- /dev/null +++ b/frontend/assets/AppAsset.php @@ -0,0 +1,43 @@ + + * @since 2.0 + */ +class AppAsset extends AssetBundle +{ + public $basePath = '@webroot'; + public $baseUrl = '@web'; + public $css = [ + 'css/css_header.css', + 'css/comments.css', + 'http://fonts.googleapis.com/css?family=Roboto:400,300,700&subset=latin,cyrillic-ext', + ]; + public $js = [ + + '/js/artbox_basket.js', + 'js/script.js', + 'js/new_script.js', + ]; + public $depends = [ + 'yii\web\JqueryAsset', + 'sersid\owlcarousel\Asset', + 'yii\bootstrap\BootstrapPluginAsset', + + ]; + + public $jsOptions = [ + 'position' => View::POS_END + ]; + + +} diff --git a/frontend/assets/FlipclockAsset.php b/frontend/assets/FlipclockAsset.php new file mode 100755 index 0000000..e5ab28c --- /dev/null +++ b/frontend/assets/FlipclockAsset.php @@ -0,0 +1,33 @@ + + * @since 2.0 + */ +class FlipclockAsset extends AssetBundle +{ + public $sourcePath = '@bower'; + public $css = [ + 'flipclock/compiled/flipclock.css' + ]; + public $js = [ + 'flipclock/compiled/flipclock.min.js' + ]; + public $jsOptions = array( + 'position' => \yii\web\View::POS_END + ); + + public $depends = [ + 'yii\web\JqueryAsset' + + ]; +} diff --git a/frontend/assets/FotoramaAsset.php b/frontend/assets/FotoramaAsset.php new file mode 100755 index 0000000..eda4deb --- /dev/null +++ b/frontend/assets/FotoramaAsset.php @@ -0,0 +1,31 @@ + + * @since 2.0 + */ +class FotoramaAsset extends AssetBundle +{ + public $sourcePath = '@bower'; + public $css = [ + 'lightbox2/dist/css/lightbox.min.css' + ]; + public $js = [ + 'lightbox2/dist/js/lightbox.min.js' + ]; + public $jsOptions = array( + 'position' => \yii\web\View::POS_END + ); + public $depends = [ + 'yii\web\YiiAsset', + ]; +} diff --git a/frontend/assets/IeAsset.php b/frontend/assets/IeAsset.php new file mode 100755 index 0000000..8b4afae --- /dev/null +++ b/frontend/assets/IeAsset.php @@ -0,0 +1,26 @@ + + * @since 2.0 + */ +class IeAsset extends AssetBundle +{ + public $basePath = '@webroot'; + public $baseUrl = '@web'; + public $cssOptions = ['condition' => 'lte IE9']; + public $css = [ + 'css/ie.css' + ]; + + +} diff --git a/frontend/components/BgWidget.php b/frontend/components/BgWidget.php new file mode 100755 index 0000000..bf78691 --- /dev/null +++ b/frontend/components/BgWidget.php @@ -0,0 +1,30 @@ +getView(); + $view->registerJs(" + var heightR = $('.f').height();// высота экрана + var widthR = $(window).width();// ширина экрана + + $('#bg').css({'height':heightR+100}); + ", View::POS_READY, 'bg'); + $this->bg = Bg::find()->orderBy('random()')->one(); + } + + public function run(){ + return ' +'; + } +} +?> \ No newline at end of file diff --git a/frontend/components/HreflangWidget.php b/frontend/components/HreflangWidget.php new file mode 100755 index 0000000..eb7adf4 --- /dev/null +++ b/frontend/components/HreflangWidget.php @@ -0,0 +1,52 @@ +requestedRoute, '/')], + Yii::$app->request->getQueryParams(), + [ + 'language' => $language, + ] + ); + return Url::to($params); + } + + public function run(){ + //$lang = (Yii::$app->language=='ru') ? 'en' : 'ru'; + $result = ''; + foreach (Yii::$app->urlManager->languages as $language) { + if ($language === Yii::$app->language) { + // skip current language + continue; + } + + $result.= Html::tag( + 'link', + '', + [ + 'rel' => 'alternate', + 'hreflang' => $language, + 'href' => $this->translateCurrentRequest($language), + ] + ); + } + return $result; + } +} +?> \ No newline at end of file diff --git a/frontend/components/SeoComponent.php b/frontend/components/SeoComponent.php new file mode 100755 index 0000000..060641f --- /dev/null +++ b/frontend/components/SeoComponent.php @@ -0,0 +1,37 @@ +request->isGet) { + \Yii::$app->on(\yii\base\Application::EVENT_BEFORE_REQUEST, function($event) { + $array = ['%21'=>'!','%22'=>'"','%23'=>'#','%24'=>'$','%25'=>'%','%26'=>'&','%27'=>'\'','%28'=>'(','%29'=>')','%2a'=>'*','%2b'=>'+','%2c'=>',','%2d'=>'-','%2e'=>'.','%2f'=>'/','%3a'=>':','%3b'=>';','%3c'=>'<','%3d'=>'=','%3e'=>'>','%3f'=>'?','%40'=>'@','%5b'=>'[','%5c'=>'\\','%5d'=>']','%5e'=>'^','%5f'=>'_','%60'=>'`','%7b'=>'{','%7c'=>'|','%7d'=>'}','%7e'=>'~']; + $url = mb_strtolower (\Yii::$app->request->url); + + $continue = true; + + foreach($array as $sym=>$sym_row){ + if(strpos($url, $sym)){ + $url = str_replace($sym, $sym_row, $url); + $continue = false; + + } + } + + if(!$continue){ + \Yii::$app->getResponse()->redirect($url); + } + }); + } + + return $app; + } + +} \ No newline at end of file diff --git a/frontend/components/Text.php b/frontend/components/Text.php new file mode 100755 index 0000000..1905d98 --- /dev/null +++ b/frontend/components/Text.php @@ -0,0 +1,16 @@ +$count) + { + //$pos = mb_strpos($text, ' ', $count, 'UTF-8'); + $text = mb_substr($text, 0, $count, 'UTF-8'); + return $text.'...'; + } + else + return $text; + } +} \ No newline at end of file diff --git a/frontend/config/.gitignore b/frontend/config/.gitignore new file mode 100755 index 0000000..8ded784 --- /dev/null +++ b/frontend/config/.gitignore @@ -0,0 +1,2 @@ +main-local.php +params-local.php \ No newline at end of file diff --git a/frontend/config/bootstrap.php b/frontend/config/bootstrap.php new file mode 100755 index 0000000..dca846e --- /dev/null +++ b/frontend/config/bootstrap.php @@ -0,0 +1,2 @@ + 'app-frontend', + 'name'=>'Лінія Світла', + 'basePath' => dirname(__DIR__), + 'controllerNamespace' => 'frontend\controllers', + 'modules' => [ + + ], + 'components' => [ + 'assetManager' => [ + 'bundles' => [ + 'yii\web\JqueryAsset' =>[ + 'jsOptions' => ['position' => \yii\web\View::POS_END] + ] + ], + ], + 'authManager' => [ + 'class' => 'yii\rbac\DbManager', + ], + 'user' => [ + 'identityClass' => 'common\models\Customer', + 'enableAutoLogin' => true, + 'loginUrl' => ['login'], + ], + 'request'=>[ + 'cookieValidationKey' => 'ndahjhjjidasuidrqeswuiuirqw89', + 'csrfParam' => '_frontendCSRF', + 'class' => 'common\components\Request', + + 'web'=> '/frontend/web' + + ], + + 'log' => [ + 'traceLevel' => YII_DEBUG ? 3 : 0, + 'targets' => [ + [ + 'class' => 'yii\log\FileTarget', + 'levels' => ['error', 'warning'], + ], + ], + ], + 'errorHandler' => [ + 'errorAction' => 'site/error', + ], + + 'urlManager' => [ + 'enablePrettyUrl' => true, + 'showScriptName' => false, + 'rules' => [ + '' => 'site/main', + 'login' => 'login/main', + 'iam' => 'iam/main', + 'text/' => 'text/main', + '/text/' => 'text/main', + [ + 'class' => '\common\modules\product\CatalogUrlManager', + 'route_map' => [ + 'catalog' => 'catalog/category', + 'product' => 'catalog/product', + '' => 'catalog/product', //linija sveta + + + ] + ], + + 'cabinet/main' => '/cabinet/main', + 'priceparam.xml' => 'site/priceparam', + 'price.xml' => 'site/price', + 'smstest' => 'site/sms', + 'search/main' => 'search/main', + 'news/' => 'news/show', + 'brands/main' => 'catalog/brands', + 'brands/' => 'catalog/brand', + 'articles/main' => 'articles/main', + 'articles/' => 'articles/show', + 'event/main' => 'event/main', + 'event/sale/' => 'event/sale', + 'event/' => 'event/show', + ], + 'class' => 'common\components\urlManager\LangUrlManager', + 'languages' => ['ru', 'ua', 'en'], + 'lang' => 'ru', + 'langParam' => 'language', + ], + + ], + 'params' => $params, +]; diff --git a/frontend/config/params.php b/frontend/config/params.php new file mode 100755 index 0000000..4ee7a49 --- /dev/null +++ b/frontend/config/params.php @@ -0,0 +1,4 @@ + 'admin@example.com', +]; diff --git a/frontend/controllers/AjaxController.php b/frontend/controllers/AjaxController.php new file mode 100755 index 0000000..ebd6e90 --- /dev/null +++ b/frontend/controllers/AjaxController.php @@ -0,0 +1,113 @@ +response; + $response->format = $response::FORMAT_JSON; + $request = \Yii::$app->request; + $model = new Feedback([ + 'scenario' => Feedback::SCENARIO_FEEDBACK, + ]); + if($model->load($request->post())) { + if($model->validate()) { + $model->save(false); + return [ + 'result' => 'Запрос успешно отправлен.', + ]; + } else { + return [ + 'error' => 'Validation failed', + 'result' => [ + 'errors' => $model->getFirstErrors(), + ], + ]; + } + } + $response->statusCode = 400; + $response->statusText = 'Empty request'; + return ['error' => 'Empty request']; + } + + + public function actionNew(){ + return specialProducts::widget(['type' => 'new']); + } + + public function actionTop(){ + return specialProducts::widget(['type' => 'top']); + } + + public function actionProm(){ + return specialProducts::widget(['type' => 'promo']); + } + + + public function actionCount(){ + $filter = \Yii::$app->request->get('info'); + $id = \Yii::$app->request->get('category'); + + + if(!empty( $filter[ 'brands' ] )) { + $brands = Brand::find() + ->select('brand_id') + ->where([ + 'in', + 'alias', + $filter[ 'brands' ], + ]) + ->all(); + $filter[ 'brands' ] = [ ]; + foreach($brands as $brand) { + $filter[ 'brands' ][] = $brand->brand_id; + } + } + + if(!empty($filter)){ + $category = Category::findOne($id); + return $this->findItem($category,$filter); + } else { + return 'test'; + } + + } + + public function getSearchQuery($category = null, $params = []) { + + + /** @var ActiveQuery $query */ + /**@var Category $category **/ + $query = $category->getProducts(); + + + $query->select(['product.*']); + $query->joinWith(['enabledVariants','brand','options', 'category']); + + $query->groupBy(['product.product_id', 'product_variant.price']); + + ProductHelper::_setQueryParams($query, $params); + + $query->andWhere(['!=', ProductVariant::tableName() .'.status', 1]); + + + + return $query; + + } + + + + public function findItem($category,$params){ + return $this->getSearchQuery($category,$params)->count(); + } +} \ No newline at end of file diff --git a/frontend/controllers/ArticlesController.php b/frontend/controllers/ArticlesController.php new file mode 100755 index 0000000..e018052 --- /dev/null +++ b/frontend/controllers/ArticlesController.php @@ -0,0 +1,49 @@ +groupBy('id')->orderBy('id DESC') ; + $countQuery = clone $query; + $pages = new Pagination(['totalCount' => $countQuery->count(), 'pageSize'=>18]); + $pages->forcePageParam = false; + $pages->pageSizeParam = false; + $news = $query->offset($pages->offset) + ->with(['comments.rating', 'averageRating']) + ->limit($pages->limit) + ->all(); + + return $this->render('index', [ + 'pages'=>$pages, + 'news'=>$news, + ]); + } + public function actionShow($translit){ + $news = $this->findModel($translit); + + + return $this->render('show', [ + 'news'=>$news, + ]); + } + protected function findModel($translit) + { + if (($model = Articles::findOne(["translit"=>$translit])) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } + +} \ No newline at end of file diff --git a/frontend/controllers/BasketController.php b/frontend/controllers/BasketController.php new file mode 100755 index 0000000..2baf0d6 --- /dev/null +++ b/frontend/controllers/BasketController.php @@ -0,0 +1,110 @@ +response; + $response->format = Response::FORMAT_JSON; + /** + * @var Basket $basket + */ + $basket = \Yii::$app->basket; + $result = [ + 'basket' => $basket->getData(), + 'modal' => $this->getModal($basket), + 'cart' => $this->getCart($basket), + ]; + return $result; + } + + public function actionAdd(int $product_variant_id, int $count) + { + $response = \Yii::$app->response; + $response->format = Response::FORMAT_JSON; + /** + * @var Basket $basket + */ + $basket = \Yii::$app->basket; + $basket->add($product_variant_id, $count); + $result = [ + 'basket' => $basket->getData(), + 'modal' => $this->getModal($basket), + 'cart' => $this->getCart($basket), + ]; + return $result; + } + + public function actionSet(int $product_variant_id, int $count) + { + $response = \Yii::$app->response; + $response->format = Response::FORMAT_JSON; + /** + * @var Basket $basket + */ + $basket = \Yii::$app->basket; + $basket->set($product_variant_id, $count); + $result = [ + 'basket' => $basket->getData(), + 'modal' => $this->getModal($basket), + 'cart' => $this->getCart($basket), + ]; + return $result; + } + + public function actionTest() + { + /** + * @var Basket $basket + */ + $basket = \Yii::$app->basket; + $modal = $this->getModal($basket); + return $modal; + } + + /** + * @var $basket \common\models\Basket + * @return string modal_items + */ + public function getModal($basket): string + { + + \Yii::$app->getAssetManager()->bundles['yii\web\JqueryAsset']['js'] =[]; + + + $output = ''; + $data = $basket->getData(); + $models = $basket->findModels(array_keys($data)); + if(!empty( $models )) { + $output = $this->renderAjax('modal_items', [ + 'models' => $models, + 'basket' => $basket, + ]); + } + return $output; + } + + /** + * @param Basket $basket + * + * @return string + */ + public function getCart($basket): string + { + $count = $basket->getCount(); + $sum = $basket->getSum(); + $output = $this->renderPartial('cart', [ + 'count' => $count, + 'sum' => $sum, + ]); + return $output; + } + } diff --git a/frontend/controllers/CabinetController.php b/frontend/controllers/CabinetController.php new file mode 100755 index 0000000..589d7f7 --- /dev/null +++ b/frontend/controllers/CabinetController.php @@ -0,0 +1,100 @@ + [ + 'class' => AccessControl::className(), + 'rules' => [ + [ + 'actions' => ['login', 'error'], + 'allow' => true, + ], + [ + 'actions' => ['logout', 'main', 'create', 'update', 'view', 'delete','my-orders','bookmarks'], + 'allow' => true, + 'roles' => ['@'], + ], + ], + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'logout' => ['post'], + ], + ], + ]; + } + + public function actionMain(){ + return $this->render('index'); + } + + public function actionUpdate(){ + + + + $model = Yii::$app->user->identity; + + + if(Yii::$app->request->post()){ + + $model->load(Yii::$app->request->post()); + $model->validate(); + + if($model->validate()){ + $model->save(); + + } + + } + + + return $this->render('update',[ + 'model' =>$model + ]); + } + + + public function actionBookmarks(){ + return $this->render('bookmarks',[ + + ]); + } + + public function actionMyOrders(){ + return $this->render('my-orders',[ + + ]); + } + +} \ No newline at end of file diff --git a/frontend/controllers/CatalogController.php b/frontend/controllers/CatalogController.php new file mode 100755 index 0000000..5a115a5 --- /dev/null +++ b/frontend/controllers/CatalogController.php @@ -0,0 +1,226 @@ +request->get('category'); + $filter = Yii::$app->request->get('filters', [ ]); + $filter_check = $filter; + + if(empty( $category->category_id ) && empty( $word )) { + return $this->render('catalog'); + } + + ProductHelper::addLastCategory($category->category_id); + + $params = [ ]; + + $optionsList = ArrayHelper::getColumn(TaxGroup::find() + ->where([ 'is_filter' => 'TRUE' ]) + ->all(), 'alias'); + + + + if(!empty( $filter[ 'special' ] )) { + unset( $filter_check[ 'special' ] ); + if(!is_array($filter[ 'special' ])) { + $filter[ 'special' ] = [ $filter[ 'special' ] ]; + } + if(in_array('new', $filter[ 'special' ])) { + $params[ 'special' ][ 'is_new' ] = true; + } + if(in_array('top', $filter[ 'special' ])) { + $params[ 'special' ][ 'is_top' ] = true; + } + if(in_array('promo', $filter[ 'special' ])) { + $params[ 'special' ][ 'akciya' ] = true; + } + } + + if(!empty( $filter[ 'prices' ] )) { + unset( $filter_check[ 'prices' ] ); + $params[ 'prices' ] = $filter[ 'prices' ]; + } + + $activeFiltersParams = $filter_check; + + if(!empty( $filter[ 'brands' ] )) { + unset( $filter_check[ 'brands' ] ); + $brands = Brand::find() + ->select('brand_id') + ->where([ + 'in', + 'alias', + $filter[ 'brands' ], + ]) + ->all(); + $params[ 'brands' ] = [ ]; + foreach($brands as $brand) { + $params[ 'brands' ][] = $brand->brand_id; + } + } + + foreach($optionsList as $optionList) { + + if(isset( $filter[ $optionList ] )) { + unset( $filter_check[ $optionList ] ); + $params[ $optionList ] = $filter[ $optionList ]; + } + + } + + if(!empty( $filter_check )) { + $filter = array_diff_key($filter, $filter_check); + Yii::$app->response->redirect([ + 'catalog/category', + 'category' => $category, + 'filters' => $filter, + ], 301); + } + + $productModel = new ProductFrontendSearch(); + + $productProvider = $productModel->search($category, $params); + + + $brandModel = new BrandSearch(); + $brands = $brandModel->getBrands($category, $params) + ->all(); + + + $groups = $category->getActiveFilters(); + + foreach($brands as $brand){ + array_unshift($groups , [ + 'group_alias' => 'brands', + 'option_alias' => $brand->alias, + 'tax_option_id' => $brand->brand_id, + 'value' => $brand->name, + 'alias' => 'brands', + 'name' => 'Бренды' + ]); + } + + + + foreach ($groups as $key=> $group) { + $param = $activeFiltersParams; + if(isset($param[$group['alias']])){ + if(!in_array($group['option_alias'],$param[$group['alias']])){ + $param[$group['alias']][] = $group['option_alias']; + } else { + continue; + } + }else { + $param = array_merge($param, [$group['alias']=>[$group['option_alias']]]); + } + + $groups[$key] = array_merge($groups[$key],['cacheKey' => json_encode($param)] ); + + } + + + + $groups = ArrayHelper::index($groups, null, 'name'); + + + + + $priceLimits = $productModel->priceLimits($category, $params); + + + return $this->render('products', [ + 'category' => $category, + 'filter' => $filter, + 'params' => $params, + 'productModel' => $productModel, + 'productProvider' => $productProvider, + 'groups' => $groups, + 'priceLimits' => $priceLimits, + ]); + + } + + public function actionProduct() + { + /** @var Product $product */ + $product = Yii::$app->request->get('product'); + + + ProductHelper::addLastProsucts($product->product_id); + + $category = null; + $last_category_id = ProductHelper::getLastCategory(); + if(!empty($last_category_id)) { + $category = $product->getCategory()->andWhere(['category_id' => $last_category_id])->one(); + } + if(empty($category)) { + $category = $product->category; + } + + return $this->render('product', [ + 'product' => $product, + 'category' => $category, + ]); + } + + public function actionBrands() + { + $dataProvider = new ActiveDataProvider([ + 'query' => Brand::find()->orderBy('name'), + 'pagination' => [ + 'pageSize' => -1, + ] + ]); + + return $this->render('brands', [ + 'dataProvider' => $dataProvider, + ]); + } + + public function actionBrand($brand) + { + $brand = BrandSearch::findByAlias($brand); + + $params = [ + 'brands' => $brand->brand_id, + ]; + + $productModel = new ProductFrontendSearch(); + $productProvider = $productModel->search(null, $params); + + $priceLimits = $productModel->priceLimits(null, $params); + + return $this->render('brand', [ + 'productModel' => $productModel, + 'productProvider' => $productProvider, + 'brand' => $brand, + 'priceLimits' => $priceLimits, + ]); + } + +} diff --git a/frontend/controllers/EventController.php b/frontend/controllers/EventController.php new file mode 100755 index 0000000..d745a88 --- /dev/null +++ b/frontend/controllers/EventController.php @@ -0,0 +1,82 @@ + Event::find()->where(['is_event'=>true]) ]); + + return $this->render('index', [ + 'dataProvider' => $dataProvider, + ]); + } + + + + public function actionShow($alias) + { + + $model = $this->findModel($alias); + $productProvider = new ActiveDataProvider([ + 'query' => $model->getProducts()->with([ + 'images', + 'events', + 'variant', + 'variant.image', + 'comments', + 'averageRating', + ]), + ]); + + return $this->render('show', [ + 'productProvider' => $productProvider, + 'model' => $model, + ]); + } + + public function actionSale($percent) + { + + $model = Event::find()->where(['percent'=>$percent, 'sale'=>true])->one(); + + $productProvider = new ActiveDataProvider([ + 'query' => $model->getProducts()->with([ + 'images', + 'events', + 'variant', + 'variant.image', + 'comments', + 'averageRating', + ]), + ]); + + return $this->render('show', [ + 'productProvider' => $productProvider, + 'model' => $model, + ]); + } + + protected function findModel($alias) + { + if (($model = Event::findOne(["alias"=>$alias,'is_event' => true])) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } + + +} \ No newline at end of file diff --git a/frontend/controllers/OrderController.php b/frontend/controllers/OrderController.php new file mode 100755 index 0000000..a973a70 --- /dev/null +++ b/frontend/controllers/OrderController.php @@ -0,0 +1,240 @@ +basket; + $data = $basket->getData(); + $models = $basket->findModels(array_keys($data)); + return $this->render('index', [ + 'models' => $models, + 'basket' => $basket, + ]); + } + + /** + * @return string + */ + public function actionSave() + { + $modelOrder = new Orders; + /** + * @var $basket Basket + */ + $basket = \Yii::$app->basket; + $productV = $basket->getData(); + if(!empty( $productV ) && $modelOrder->load(Yii::$app->request->post()) && $modelOrder->save()) { + foreach($productV as $index => $row) { + $modelOrdersProducts = new OrdersProducts(); + $mod_id = $index; + $product = ProductVariant::findOne($mod_id); + /** + * Проверяем товар на наличие + */ + if( !$product->price > 0) { + /** + * Добавляем сообщение об ошибке + */ + \Yii::$app->getSession() + ->setFlash('error', 'К сожалению товара ' . $product->name . ' нет в наличии'); + $basket->delete($product->product_variant_id); + unset( $productV[ $index ] ); + } else { + /** + * Удаляем товар с массива и сохраняем в заказ + */ + $modelOrdersProducts->order_id = $modelOrder->id; + $modelOrdersProducts->product_name = $product->product->name; + $modelOrdersProducts->name = $product->name; + $modelOrdersProducts->price = $productV[ $index ][ 'price' ]; + $modelOrdersProducts->count = $productV[ $index ][ 'count' ]; + $modelOrdersProducts->sum_cost = $productV[ $index ][ 'price' ] * $productV[ $index ][ 'count' ]; + $modelOrdersProducts->mod_id = $mod_id; + $modelOrdersProducts->sku = $product->sku; + $modelOrdersProducts->validate(); + $modelOrdersProducts->save(); + $productV[ $index ] = ArrayHelper::toArray($modelOrdersProducts); + if(isset($product->image)){ + $productV[ $index ][ 'img' ] = \common\components\artboximage\ArtboxImageHelper::getImageSrc($product->image->imageUrl, 'list'); + } + + } + } + /** + * Сохраняем заказ + */ + if(!Yii::$app->user->id && !empty( $modelOrder->email )) { + $modelUser = new Customer(); + $modelUser->role = 'person'; + $modelUser->username = $modelOrder->email; + $modelUser->name = $modelOrder->name; + $modelUser->phone = $modelOrder->phone; + $modelUser->password = Yii::$app->getSecurity() + ->generateRandomString(10); + $modelUser->group_id = 2; + $modelUser->save(); + } + $order = clone $modelOrder; + /** + * Чистим сессию корзины + */ + $modelOrder->clearBasket(); + Mailer::widget([ + 'type' => 'order', + 'subject' => 'Спасибо за Ваш заказ', + 'email' => $modelOrder->email, + 'params' => [ + 'order' => $order, + 'variants' => $productV, + ], + ]); + //$text = "# zakaz: ". $order->id .". V blijayshee vremya menedjer svyajetsya s Vami. (044) 303 90 15"; + //Yii::$app->sms->send($order->phone, $text); + Yii::$app->session[ 'order_data' ] = [ 'order' => $order, + 'variants' => $productV, + ]; + return $this->redirect([ 'order/success' ]); + } + $data = $basket->getData(); + $models = $basket->findModels(array_keys($data)); + return $this->render('index', [ + 'models' => $models, + 'basket' => $basket, + ]); + } + + + public function actionQuick() + { + $response = \Yii::$app->response; + $request = \Yii::$app->request; + $response->format = $response::FORMAT_JSON; + $product_variant_id = (int) $request->post('product_variant_id'); + $orders = new Orders([ + 'scenario' => Orders::SCENARIO_QUICK, + 'name' => 'Покупка в 1 клик', + ]); + if(!empty( $product_variant_id )) { + /** + * @var ProductVariant $product_variant + */ + $product_variant = ProductVariant::findOne($product_variant_id); + } else { + throw new InvalidParamException('Не указан товар'); + } + if(!empty( $product_variant ) && $orders->load($request->post()) && $orders->save()) { + if( $product_variant->price <= 0) { + $orders->delete(); + return [ + 'error' => 'К сожалению товара ' . $product_variant->name . ' нет в наличии', + ]; + } else { + $order_product = new OrdersProducts([ + 'order_id' => $orders->id, + 'product_name' => $product_variant->product->name, + 'name' => $product_variant->name, + 'price' => $product_variant->price, + 'count' => 1, + 'sum_cost' => $product_variant->price, + 'mod_id' => $product_variant->product_variant_id, + 'sku' => $product_variant->sku, + ]); + $order_product->save(); + return [ + 'result' => 'Спасибо за заказ! Наши менеджеры свяжутся с Вами в ближайшее время.', + ]; + } + } else { + throw new InvalidConfigException('Товар не найден или не удалось загрузить данные о покупателе.'); + } + } + + + public function actionSuccess() + { + return $this->render('success'); + } + + + public function actionQuickBasket() + { + + $response = \Yii::$app->response; + $request = \Yii::$app->request; + $response->format = $response::FORMAT_JSON; + /** + * @var array $data + */ + $data = \Yii::$app->basket->getData(); + + $orders = new Orders([ + 'scenario' => Orders::SCENARIO_QUICK, + 'name' => 'Покупка в 1 клик', + ]); + + + + if(!empty( $data )) { + + /** + * @var ProductVariant[] $product_variants + * @var OrdersProducts[] $order_products + */ + $product_variants = []; + $order_products = []; + foreach($data as $product_variant_id => $item) { + + $product_variant = ProductVariant::findOne($product_variant_id); + if(!empty($product_variant) && $product_variant->price > 0) { + $product_variants[$product_variant_id] = $product_variant; + $order_products[$product_variant_id] = new OrdersProducts([ + 'product_name' => $product_variant->product->name, + 'name' => $product_variant->name, + 'price' => $product_variant->price, + 'count' => $item['count'], + 'sum_cost' => $item['count'] * $product_variant->price, + 'mod_id' => $product_variant->product_variant_id, + 'sku' => $product_variant->sku, + ]); + } + } + + } else { + + throw new InvalidParamException('Не указан товар'); + } + + + + if(!empty( $order_products ) && $orders->load($request->post()) && $orders->save()) { + + foreach($order_products as $order_product) { + $order_product->order_id = $orders->id; + $order_product->save(); + } + \Yii::$app->basket->clear(); + return [ + 'result' => 'Спасибо за заказ! Наши менеджеры свяжутся с Вами в ближайшее время.', + ]; + } else { + + throw new InvalidConfigException('Товар не найден или не удалось загрузить данные о покупателе.'); + } + } + } diff --git a/frontend/controllers/SearchController.php b/frontend/controllers/SearchController.php new file mode 100755 index 0000000..9aa8b9f --- /dev/null +++ b/frontend/controllers/SearchController.php @@ -0,0 +1,75 @@ +request->get('word', '')); + + if (!empty($word)) + { + + + if( preg_match('/^\+?\d+$/', $word) && (iconv_strlen($word) > 4)){ + + $params['keywords'][] = $word; + + $categoriesQuery = Category::find() + ->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.category_id = '. Category::tableName() .'.category_id') + ->innerJoin(Product::tableName(), Product::tableName() .'.product_id = '. ProductCategory::tableName() .'.product_id') + ->innerJoin(ProductVariant::tableName(), ProductVariant::tableName() .'.product_id = '. ProductCategory::tableName() .'.product_id'); + $categoriesQuery->andWhere(['ilike', 'product.name', $params['keywords'][0]]); + $categories = $categoriesQuery->all(); + + } else { + + $params['keywords'] = explode(' ', preg_replace("|[\s,.!:&?~();-]|i", " ", $word)); + + foreach($params['keywords'] as $i => &$keyword) { + $keyword = trim($keyword); + if (empty($keyword)) { + unset($params['keywords'][$i]); + } + } + array_unshift($params['keywords'], $word); + + $categoriesQuery = Category::find() + ->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.category_id = '. Category::tableName() .'.category_id') + ->innerJoin(Product::tableName(), Product::tableName() .'.product_id = '. ProductCategory::tableName() .'.product_id') + ->innerJoin(ProductVariant::tableName(), ProductVariant::tableName() .'.product_id = '. ProductCategory::tableName() .'.product_id'); + foreach ($params['keywords'] as $keyword) { + $categoriesQuery->andWhere(['ilike', 'product.name', $keyword]); + } + $categories = $categoriesQuery->all(); + } + + $productModel = new ProductFrontendSearch(); + $productProvider = $productModel->search(null, $params, false); + + + return $this->render( + 'index', + [ + 'keywords' => $params['keywords'], + 'productModel' => $productModel, + 'productProvider' => $productProvider, + 'categories' => $categories, + ] + ); + } + else + { + throw new HttpException(404, 'Данной странице не существует!'); + } + } +} \ No newline at end of file diff --git a/frontend/controllers/SiteController.php b/frontend/controllers/SiteController.php new file mode 100755 index 0000000..d68f7a6 --- /dev/null +++ b/frontend/controllers/SiteController.php @@ -0,0 +1,362 @@ +render('index', [ + + + ]); + } + + /** + * Logs out the current user. + * + * @return mixed + */ + public function actionLogout() + { + Yii::$app->user->logout(); + + return $this->goHome(); + } + /** + * Logs in a user. + * + * @return mixed + */ + public function actionLogin() + { + if (!\Yii::$app->user->isGuest) { + return $this->goHome(); + } + + $model = new LoginForm(); + if ($model->load(Yii::$app->request->post()) && $model->login()) { + return $this->goBack(); + } else { + return $this->render('index', [ + 'model' => $model, + ]); + } + } + + + /** + * Signs user up. + * + * @return mixed + */ + public function actionSignup() + { + + if(Yii::$app->request->post()){ + if (Yii::$app->request->isAjax) { + Yii::$app->response->format = Response::FORMAT_JSON; + $model = new SignupForm(); + $model->load(Yii::$app->request->post()); + return ActiveForm::validate($model); + } else { + $model = new SignupForm(); + $model->load(Yii::$app->request->post()); + if ($user = $model->signup()) { + if (Yii::$app->getUser()->login($user)) { + return $this->goHome(); + } + } + } + } + return $this->render('signup', [ + 'model' => $model, + ]); + } + + public function actionError(){ + return $this->render('error', [ + 'code'=>'404', + ]); + } + /** + * Requests password reset. + * + * @return mixed + */ + public function actionRequestPasswordReset() + { + $model = new PasswordResetRequestForm(); + if ($model->load(Yii::$app->request->post()) && $model->validate()) { + if ($model->sendEmail()) { + Yii::$app->session->setFlash('success', 'Check your email for further instructions.'); + + return $this->goHome(); + } else { + Yii::$app->session->setFlash('error', 'Sorry, we are unable to reset password for email provided.'); + } + } + return $this->render('requestPasswordResetToken', [ + 'model' => $model, + ]); + } + + + /** + * Resets password. + * + * @param string $token + * @return mixed + * @throws BadRequestHttpException + */ + public function actionResetPassword($token) + { + try { + $model = new ResetPasswordForm($token); + } catch (InvalidParamException $e) { + throw new BadRequestHttpException($e->getMessage()); + } + + if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) { + Yii::$app->session->setFlash('success', 'New password was saved.'); + + return $this->goHome(); + } + + return $this->render('resetPassword', [ + 'model' => $model, + ]); + } + + public function actionPriceparam () + { + $category_alias = Yii::$app->request->get('category'); + $is_count = Yii::$app->request->get('count', false); + + if ( !($category = CategorySearch::findByAlias($category_alias))) + { + throw new HttpException(404, 'Данной страницы не существует!'); + } + + $products = $category->products; + + if ($is_count) { + print (count($products)); + exit; + } + + set_time_limit (0); + header ("Content-Type: text/xml"); + print ''; + print ""; + print "" . date ("Y-m-d h:m") . ""; + print "www.linija-svitla.ua"; + print ""; + print ""; + print ""; + + print ""; + print "" . $category->category_id . ""; + print ""; + print "" . $category->name . ""; + print ""; + + + print ""; + print ""; + /** @var Product $product */ + foreach ($products as $product) { + /** @var ProductVariant $variant */ + foreach ($product->enabledVariants as $variant) { + + print ""; + print "" . htmlspecialchars($variant->product_variant_id) . ""; + print "" . htmlspecialchars($product->category->category_id) . ""; + print "" . $product->brand->name . ""; + print "" . htmlspecialchars($variant->sku) . ""; + print "" . htmlspecialchars(substr($category->name, 0, -2)) . " "; + print "" . htmlspecialchars($product->name) . " "; + print "" . $variant->name . " "; + print "" . htmlspecialchars($product->description) . ""; + print "http://www.linija-svitla.ua{$product->url}#{$variant->product_variant_id}"; + print "http://www.linija-svitla.ua{$variant->imageUrl}"; + print "" . $variant->price . ""; + print "" . $variant->price_old . ""; + print ""; + print "В наличии"; + print ""; + print ""; + } + } + print ""; + + print ""; + } + + public function actionPrice() + { + + + + $is_count = Yii::$app->request->get('count', false); + + $categories = Category::find()->all(); + + set_time_limit (0); + header ("Content-Type: text/xml"); + print ''; + print ""; + print "" . date ("Y-m-d h:m") . ""; + print "www.linija-svitla.ua"; + print ""; + print ""; + print ""; + + foreach($categories as $category){ + print ""; + print "" .$category->category_id . ""; + print "" . $category->name. ""; + print ""; + } + print ""; + + + + + print ""; + + foreach($categories as $category){ + $products = $category->getProducts()->with(['filters','filters.group'])->joinWith('variant')->where(['product_variant.status'=>0])->all(); + + if ($is_count) { + print (count($products)); + continue; + } + + /** @var Product $product */ + + foreach ($products as $product) + { + + + print ""; + print "" . htmlspecialchars($product->variant->product_variant_id) . ""; + print "" . htmlspecialchars($product->category->category_id) . ""; + print "" . $product->brand->name . ""; + print "" . htmlspecialchars($product->variant->sku) . ""; + print "" . htmlspecialchars($product->name)." " .htmlspecialchars($product->variant->name). " "; + print "" . htmlspecialchars($product->description) . ""; + print "http://www.linija-svitla.ua{$product->url}"; + print "http://www.linija-svitla.ua{$product->variant->imageUrl}"; + print "" . $product->variant->price . ""; + print "" . $product->variant->price_old . ""; + + $type = false; + foreach( $product->filters as $filter){ + + + + if($filter->group->name == "Тип точечного освещение:"){ + $type = true; + print "{$filter->name}"; + } + if($filter->group->name == "Тип настенного освещения:"){ + $type = true; + print "{$filter->name}"; + } + + if($filter->group->name == "Тип потолочного освещения:"){ + $type = true; + print "{$filter->name}"; + } + + + if($filter->group->name == "Тип уличного освещения:"){ + $type = true; + print "{$filter->name}"; + } + + if($filter->group->name == "Тип лампочки:"){ + $type = true; + print "{$filter->name}"; + } + + + + + if($filter->group->name == "Назначение:"){ + print "{$filter->name}"; + } + if($filter->group->name == "Стиль:"){ + print "{$filter->name}"; + } + if($filter->group->name == "Количество лампочек:"){ + print "{$filter->name}"; + } + if($filter->group->name == "Тип источника света:"){ + print "{$filter->name}"; + } + if($filter->group->name == "Цоколь:"){ + print "{$filter->name}"; + } + //print "Припотолочная"; + + } + + if(!$type){ + print "{$product->category->name}"; + } + + + print ""; + print "В наличии"; + print ""; + print ""; + + + } + + } + + + + + +//var_dump($products);die(); + + + + + print ""; + + print ""; + + + } +} diff --git a/frontend/controllers/TextController.php b/frontend/controllers/TextController.php new file mode 100755 index 0000000..9b95f70 --- /dev/null +++ b/frontend/controllers/TextController.php @@ -0,0 +1,24 @@ +where(['translit'=>$_GET['translit']])->one()) + throw new HttpException(404, 'Данной странице не существует!'); + + return $this->render('index', [ + 'text'=>$modelText, + ]); + } + +} \ No newline at end of file diff --git a/frontend/models/ContactForm.php b/frontend/models/ContactForm.php new file mode 100755 index 0000000..613abb5 --- /dev/null +++ b/frontend/models/ContactForm.php @@ -0,0 +1,59 @@ + 'Verification Code', + ]; + } + + /** + * Sends an email to the specified email address using the information collected by this model. + * + * @param string $email the target email address + * @return boolean whether the email was sent + */ + public function sendEmail($email) + { + return Yii::$app->mailer->compose() + ->setTo($email) + ->setFrom([$this->email => $this->name]) + ->setSubject($this->subject) + ->setTextBody($this->body) + ->send(); + } +} diff --git a/frontend/models/PasswordResetRequestForm.php b/frontend/models/PasswordResetRequestForm.php new file mode 100755 index 0000000..c09f6f7 --- /dev/null +++ b/frontend/models/PasswordResetRequestForm.php @@ -0,0 +1,68 @@ + 'trim'], + ['email', 'required'], + ['email', 'email'], + ['email', 'exist', + 'targetClass' => '\common\models\User', + 'filter' => ['status' => User::STATUS_ACTIVE], + 'message' => 'There is no user with such email.' + ], + ]; + } + + /** + * Sends an email with a link, for resetting the password. + * + * @return boolean whether the email was send + */ + public function sendEmail() + { + /* @var $user User */ + $user = User::findOne([ + 'status' => User::STATUS_ACTIVE, + 'email' => $this->email, + ]); + + if (!$user) { + return false; + } + + if (!User::isPasswordResetTokenValid($user->password_reset_token)) { + $user->generatePasswordResetToken(); + } + + if (!$user->save()) { + return false; + } + + return Yii::$app + ->mailer + ->compose( + ['html' => 'passwordResetToken-html', 'text' => 'passwordResetToken-text'], + ['user' => $user] + ) + ->setFrom([\Yii::$app->params['supportEmail'] => \Yii::$app->name . ' robot']) + ->setTo($this->email) + ->setSubject('Password reset for ' . \Yii::$app->name) + ->send(); + } +} diff --git a/frontend/models/ProductFrontendSearch.php b/frontend/models/ProductFrontendSearch.php new file mode 100755 index 0000000..b67c943 --- /dev/null +++ b/frontend/models/ProductFrontendSearch.php @@ -0,0 +1,148 @@ + $this->getSearchQuery($category, $params, $in_stock)->with([ + 'images', + 'events', + 'variant', + 'variant.image', + 'comments', + 'averageRating', + ])->all(), + 'pagination' => [ + 'pageSize' => 15, + ], + 'sort' => [ + 'attributes' => [ + 'name' => [ + 'asc' => ['name' => SORT_ASC], + 'desc' => ['name' => SORT_DESC], + 'default' => SORT_DESC, + 'label' => 'имени', + ], + 'price' => [ + 'asc' => ['price' => SORT_ASC], + 'desc' => ['price' => SORT_DESC], + 'default' => SORT_DESC, + 'label' => 'по цене', + ], + ], + ] + ]); + + + + + + return $dataProvider; + } + + public function getSearchQuery($category = null, $params = [], $in_stock = true) { + + if (!empty($category)) { + /** @var ActiveQuery $query */ + /**@var Category $category **/ + $query = $category->getProducts(); + + } else { + $query = Product::find(); + } + + $query->select(['product.*']); + $query->joinWith(['enabledVariants','brand','options', 'category']); + + $query->groupBy(['product.product_id', 'product_variant.price']); + + ProductHelper::_setQueryParams($query, $params); + if($in_stock){ + $query->andWhere(['!=', ProductVariant::tableName() .'.status', 1]); + } + + + return $query; + } + + + /** + * @param Category|null $category + * @return array + */ + + public function priceLimits($category = null, $params = []) { + if (!empty($category)) { + /** @var ActiveQuery $query */ +// $query = $category->getRelations('product_categories'); + $query = $category->getProducts(); + } else { + $query = Product::find(); + } + $query->joinWith('variant'); + + // Price filter fix + unset($params['prices']); + + ProductHelper::_setQueryParams($query, $params); + $query->andWhere( + [ + '>=', + ProductVariant::tableName() . '.stock', + 1, + ] + ); + return [ + 'min' => $query->min(ProductVariant::tableName() .'.price'), + 'max' => $query->max(ProductVariant::tableName() .'.price'), + ]; + } +} \ No newline at end of file diff --git a/frontend/models/ResetPasswordForm.php b/frontend/models/ResetPasswordForm.php new file mode 100755 index 0000000..dd48f52 --- /dev/null +++ b/frontend/models/ResetPasswordForm.php @@ -0,0 +1,65 @@ +_user = User::findByPasswordResetToken($token); + if (!$this->_user) { + throw new InvalidParamException('Wrong password reset token.'); + } + parent::__construct($config); + } + + /** + * @inheritdoc + */ + public function rules() + { + return [ + ['password', 'required'], + ['password', 'string', 'min' => 6], + ]; + } + + /** + * Resets password. + * + * @return boolean if password was reset. + */ + public function resetPassword() + { + $user = $this->_user; + $user->setPassword($this->password); + $user->removePasswordResetToken(); + + return $user->save(false); + } +} diff --git a/frontend/models/SignupForm.php b/frontend/models/SignupForm.php new file mode 100755 index 0000000..aac69bc --- /dev/null +++ b/frontend/models/SignupForm.php @@ -0,0 +1,77 @@ + 'trim'], + ['username', 'required'], + [['username','surname'], 'string', 'min' => 2, 'max' => 255], + + ['email', 'filter', 'filter' => 'trim'], + ['email', 'required'], + ['email', 'email'], + [['email','phone'], 'string', 'max' => 255], + ['email', 'unique', 'targetClass' => '\common\models\Customer', 'message' => Yii::t('app','message',[ + 'field' => 'Email' + ])], + + [['phone'], 'unique', 'targetClass' => '\common\models\Customer', 'message' => Yii::t('app','message',[ + 'field' => 'Телефон' + ])], + + ['password_repeat', 'required'], + ['password_repeat', 'compare', 'compareAttribute'=>'password', 'message'=> Yii::t('app', 'message_match_password') ], + + ['password', 'required'], + ['password', 'string', 'min' => 6], + ]; + } + + + + + + /** + * Signs user up. + * + * @return Customer|null the saved model or null if saving fails + */ + public function signup() + { + + if (!$this->validate()) { + return null; + } + + $user = new Customer(); + $user->username = $this->username; + $user->surname = $this->surname; + $user->email = $this->email; + $user->phone = $this->phone; + $user->setPassword($this->password); + $user->generateAuthKey(); + $user->validate(); + return $user->save() ? $user : null; + } +} diff --git a/frontend/views/articles/index.php b/frontend/views/articles/index.php new file mode 100755 index 0000000..632168b --- /dev/null +++ b/frontend/views/articles/index.php @@ -0,0 +1,77 @@ +getModule('artbox-comment'); + CommentAsset::register($this); +?> +title = 'Статьи'; + + $this->params[ 'seo' ][ Seo::H1] = $this->title ; + $this->params[ 'seo' ][ Seo::TITLE] = $this->title; + + $this->params['breadcrumbs'][] = $this->title; + + $this->registerMetaTag([ + 'name' => 'description', + 'content' => 'Статьи', + ]); + $this->registerMetaTag([ + 'name' => 'keywords', + 'content' => 'Статьи', + ]); +?> + + +
    +

    Блог

    + + +
    + + imageUrl, 'list'), [ 'class' => 'float-left' ]) ?> + + title ?>
    +
    + averageRating && $item->averageRating->value > 0 )) { + ?> +
    + +

    + comments); + echo Html::a(( $comment_count ? 'Отзывов: ' . count($item->comments) : "Оставить отзыв" ), [ + 'articles/show', + 'translit' => $item->translit, + '#' => 'artbox-comment', + ]); + ?> +

    +
    + body, 600); ?> +
    +
    + + +
    + $pages, + 'registerLinkTags' => true, + ]); ?> + +
    diff --git a/frontend/views/articles/show.php b/frontend/views/articles/show.php new file mode 100755 index 0000000..050f911 --- /dev/null +++ b/frontend/views/articles/show.php @@ -0,0 +1,56 @@ + +title = $news->meta_title; +$this->params['seo']['title'] = !empty($this->title) ?$this->title :$news->title; +$this->registerMetaTag(['name' => 'description', 'content' => $news->meta_description]); +$this->params[ 'breadcrumbs' ][] = ['label'=>'Статьи','url'=>['/articles/main']]; +$this->params[ 'breadcrumbs' ][] = $news->title; +?> + + +
    + +
    +

    title?>

    +
    + averageRating ) && $news->averageRating->value) { + ?> +
    + +

    + comments); + if($comment_count) { + echo "Отзывов: " . $comment_count; + } else { + echo "Оставть отзыв"; + } + ?> +

    +
    + imageUrl, 'product'), ['class'=>'blog-show-img float-left'])?> + body?> +

    date?>

    +
    + +
    +
    + $news, + 'layout' => "{form} {reply_form} {list}" + ]); + ?> +
    +
    +
    + +
    \ No newline at end of file diff --git a/frontend/views/basket/cart.php b/frontend/views/basket/cart.php new file mode 100755 index 0000000..c21c397 --- /dev/null +++ b/frontend/views/basket/cart.php @@ -0,0 +1,18 @@ + + +

    грн

    +
    + + + +
    +
    \ No newline at end of file diff --git a/frontend/views/basket/modal_items.php b/frontend/views/basket/modal_items.php new file mode 100755 index 0000000..61b125f --- /dev/null +++ b/frontend/views/basket/modal_items.php @@ -0,0 +1,121 @@ + + \ No newline at end of file diff --git a/frontend/views/cabinet/bookmarks.php b/frontend/views/cabinet/bookmarks.php new file mode 100755 index 0000000..804d20d --- /dev/null +++ b/frontend/views/cabinet/bookmarks.php @@ -0,0 +1,24 @@ +title = 'Закладки'; +$this->params['breadcrumbs'][] = $this->title; +use yii\helpers\Html; +use yii\helpers\Url; +use yii\widgets\ActiveForm; +?> + +'' +]); ?> + + + + + + + \ No newline at end of file diff --git a/frontend/views/cabinet/index.php b/frontend/views/cabinet/index.php new file mode 100755 index 0000000..829a4f8 --- /dev/null +++ b/frontend/views/cabinet/index.php @@ -0,0 +1,21 @@ +title = 'Moй кабинет'; +$this->params['breadcrumbs'][] = $this->title; +$this->params[ 'seo' ][ Seo::H1] = $this->title ; +$this->params[ 'seo' ][ Seo::TITLE] = $this->title; +?> + +
    +
    Имя
    +
    e-mail
    +
    Телефон
    +
    + +
    + +
    user->identity->name ?>
    +
    user->identity->email ?>
    +
    user->identity->phone ?>
    +
    \ No newline at end of file diff --git a/frontend/views/cabinet/my-orders.php b/frontend/views/cabinet/my-orders.php new file mode 100755 index 0000000..72f32c9 --- /dev/null +++ b/frontend/views/cabinet/my-orders.php @@ -0,0 +1,24 @@ +title = 'Мои заказы'; +$this->params['breadcrumbs'][] = $this->title; +use yii\helpers\Html; +use yii\helpers\Url; +use yii\widgets\ActiveForm; +?> + +'' +]); ?> + + + + + + + \ No newline at end of file diff --git a/frontend/views/cabinet/update.php b/frontend/views/cabinet/update.php new file mode 100755 index 0000000..dbb8439 --- /dev/null +++ b/frontend/views/cabinet/update.php @@ -0,0 +1,56 @@ +title = 'Редактировать личные данные'; + $this->params['breadcrumbs'][] = $this->title; + use yii\helpers\Html; + use yii\helpers\Url; + use yii\widgets\ActiveForm; +?> + +'' +]); ?> + + + + + + + \ No newline at end of file diff --git a/frontend/views/catalog/_product_item.php b/frontend/views/catalog/_product_item.php new file mode 100755 index 0000000..013a704 --- /dev/null +++ b/frontend/views/catalog/_product_item.php @@ -0,0 +1,141 @@ + +
    +
    +
    + +
    + name, Url::to(['catalog/product', 'product' => $model->alias]), ['class'=>'btn-product-details','data-pjax'=>0, 'itemprop' => 'name'] )?> +
    + +
    + + variant->price_old){?> +
    + + variant->price_old ?>грн + +
    + +
    + Цена: + + variant->price ?> + + грн + +
    +
    +
    +
    Особенности + + variant->status == 1){?> + снят с производства + variant->stock > 0) {?> + в наличии + + под заказ + + +
    +
    +
    +
      + +variant->status == 1){?> + +variant->stock > 0) {?> + + + + + +
    • Бренд: brand) ? $model->brand->name : '' ?>
    • + + getActiveProperties($category->category_id) as $group): ?> +
    • name ?> _options as $option) : ?> ValueRenderHTML ?>
    • + + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/frontend/views/catalog/brand.php b/frontend/views/catalog/brand.php new file mode 100755 index 0000000..d556d04 --- /dev/null +++ b/frontend/views/catalog/brand.php @@ -0,0 +1,100 @@ +params['seo']['title'] = !empty($brand->meta_title) ? $brand->meta_title : ''; + +$this->params['seo']['fields']['name'] = $brand->name; +$this->params['seo']['h1'] = !empty($brand->h1) ? $brand->h1 : $brand->name; +$this->params['seo']['seo_text'] = $brand->seo_text; +$this->params['seo']['description'] = $brand->meta_desc; +$this->params['seo']['meta'] = $brand->meta_robots; +$this->params['seo']['category_name'] = $brand->name; + +$this->params['breadcrumbs'][] = $brand->name; +?> + +
    +
    + + +
    + +
    + + +
    + + +
    +
    + + + + + +

    'h1']) ?>

    + + + + + +
    + + +
    + + + $productProvider, + 'itemView' => function ($model, $key, $index, $widget) { + return $this->render('_product_item', [ + 'model' => $model, + 'category' => $model->category + ]); + }, + 'layout' => "{items}
    {pager}", + ]) + + ?> + + +
    +
    + +
    + + +
    + + +
    + + +
    +
    + + diff --git a/frontend/views/catalog/product.php b/frontend/views/catalog/product.php new file mode 100755 index 0000000..59b2bb3 --- /dev/null +++ b/frontend/views/catalog/product.php @@ -0,0 +1,675 @@ +title = $product->name; + + + $this->params[ 'seo' ][ Seo::TITLE ] = $product->name .' купить в Киеве, Украине недорого - Лінія Світла'; + $this->params[ 'seo' ][ 'fields' ][ 'name' ] = $product->name; + $this->params[ 'seo' ][ 'h1' ] = $product->name; + + + $this->params[ 'breadcrumbs' ][] = [ + 'label' => $category->name, + 'url' => [ + 'catalog/category', + 'category' => $category, + ], + ]; + + $this->params[ 'breadcrumbs' ][] = [ + 'label' => $product->brand->name, + 'url' => ['catalog/category', 'category' => $category, 'filters' => ['brands' => [$product->brand->alias]]], + ]; + $this->params[ 'breadcrumbs' ][] = $product->name . ' #' . $product->variant->sku; +?> + +
    +
    +
    + +

    'h1' ]) ?>

    +
    Код:variant->sku ?>
    +
    + + +
    + +
    + + +
    + + + + +
    +
    + + + + + + + + +
    + variant->price_old ){?> + variant->price_old ?> грн. + + + variant->price ?> грн. + + + + variant->status != 1) + {?> + Купить + + снят с производства + + + + + + */ + ?> +
    + + +
    +
    +
    +
    +
    + + + +
    + + + + + + + + + + + + events as $event):?> + end_at) && $event->isActive()):?> +
    + +
    name,Url::to(['event/show','alias'=>$event->alias]))?>
    +
    До конца осталось:
    +
    + primaryKey'), { + clockFace: 'DailyCounter', + language: 'ru', + classes: { + active: 'flip-clock-active', + before: 'flip-clock-before', + divider: 'flip-clock-divider', + dot: 'flip-clock-dot', + label: 'flip-clock-label', + flip: 'flip', + play: 'play', + wrapper: 'flip-clock-wrapper' + }, + }); + + clock.setTime( ".(strtotime($event->end_at) - strtotime(date('Y-m-d H:i:s')))."); + clock.setCountdown(true); + clock.start(); + "; + $this->registerJs($js,View::POS_LOAD) + ?> + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + variant->status == 1){?> + снят с производства + variant->stock > 0) {?> + в наличии + + под заказ + +   + + + + + + +
    +
    +
      +
    • +
      Быстрая доставка
      +
      +

      В любой уголок + Украины:
      + — Самовывоз Новая Почта - 55 грн.
      + — Курьер Новая Почта - 88 грн.
      + — Курьер «ИнТайм» - 60 грн.

      + variant->price >= 1000){?> +

      + Киев:
      + — Курьер - 50 грн. + бесплатно! + *
      + — Самовывоз - + бесплатно!
      + — Пункт Новой Почты - 55 грн. + бесплатно! + * +

      + +

      + Киев:
      + — Курьер - 50 грн + *
      + — Самовывоз - + бесплатно!
      + — Пункт Новой Почты - 55 грн. + * +

      + +

      + * Стоимость расчитана для оформляемого заказа +

      + +
      +
    • +
    • +
      14 дней на обмен
      +
      без лишних вопросов. Почитайте + условия возврата +
      + +
    • +
    • +
      12 месяцев гарантии
      +
      официальной от производителя
      + +
    • +
    • +
      Условия доставки люстра + Elstead + : Киев и вся Украина +
      +
      + Лінія світла - электронный магазин, который обеспечит доставку товаров раздела - люстра Элстед жителям городов: Херсон, а так же др. города Украины. +
      +
    • +
    +
    +
    +
    +
    +
    + events as $event):?> + banner) && $event->isActive()):?> + getImageUrl('banner'), 'banner_list'),Url::to(['event/sale','percent'=>$event->percent]))?> + + +
    +
    +
    + + +
    + variant->price_old){?> + + variant->price_old ?> +  грн. + + + + variant->price ?> +  грн. + +
    + + + +
    + variant->status != 1){?> + Купить + + снят с производства + +
    +
    + +
    +
    + Оплатить + + + +
    +
    +
    + variant->status != 1){?> + + + + + + +
    + + + */ + ?> +
    + variant->status != 1) { + ?> +
    +
    + Orders::SCENARIO_QUICK, + ]); + $form = ActiveForm::begin([ + 'id' => 'quickbuy-form', + ]); + echo Html::hiddenInput('product_variant_id', $product->variant->product_variant_id); + echo $form->field($quickbuy, 'phone') + ->widget(MaskedInput::className(), [ + 'mask' => '+38(999)999-99-99', + 'options' => [ + 'type' => 'tel', + 'class' => 'input phone', + ], + ]) + ->label(false); + echo Html::submitInput('Заказать в 1 клик', [ 'class' => 'btn' ]); + $form::end(); + ?> +
    +
    + +
    + averageRating )) { + ?> +
    +
    + рейтинг: averageRating->value?>   + голосов: + comments); + ?> + + +
    + +
    + +
    + + +
    + +
    +

    + Характеристики: +

    + + + + + +
    +
    + + + + + + + + + + + + getActiveProperties($category->category_id) as $group): ?> + + + + + + + +
    IDvariant->sku ?>
    Брендbrand) ? $product->brand->name : '' ?>
    name ?>_options as $option) : ?> ValueRenderHTML ?>
    +
    +
    + +
    + description ?> +
    + +
    +
    + +
    + + +
    +

    + Коллекция светильников +

    + +
    +
    +
    +
    + + +
    +
    + Цена: + 25794.00 грн + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + Цена: + 14330.40 грн + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + Цена: + 8598.00 грн + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + */?> + + + +
    +
    +

    + Отзывы +

    +
    + $product, + ]); + ?> +
    +
    +
    +
    +
    + +
    +
    + +
    + \ No newline at end of file diff --git a/frontend/views/catalog/products.php b/frontend/views/catalog/products.php new file mode 100755 index 0000000..ddaf95d --- /dev/null +++ b/frontend/views/catalog/products.php @@ -0,0 +1,145 @@ +registerCssFile (Yii::getAlias('@web/css/ion.rangeSlider.css')); + $this->registerCssFile (Yii::getAlias('@web/css/ion.rangeSlider.skinHTML5.css')); + $this->registerJsFile(Yii::getAlias('@web/js/ion.rangeSlider.js'),[ + 'position' => View::POS_END, + 'depends' => ['yii\web\JqueryAsset'] + ]); + + + + + $this->params['seo']['title'] = !empty($category->meta_title) ? $category->meta_title : $category->name; + + $this->params['seo']['fields']['meta-title'] = $category->meta_title; + $this->params['seo']['h1'] = !empty($category->h1) ? $category->h1 : $category->name; + $this->params['seo']['seo_text'] = $category->seo_text; + + + + $this->params['seo']['description'] = $category->meta_desc; + if(empty($productProvider->allModels)){ + $this->params['seo']['meta'] = 'noindex,nofollow'; + }else{ + $this->params['seo']['meta'] = $category->meta_robots; + } + + $this->params['seo']['category_name'] = $category->name; + + $this->params['breadcrumbs'][] = $category->name; + $this->registerCssFile (Yii::getAlias('@web/css/ion.rangeSlider.css')); + $this->registerCssFile (Yii::getAlias('@web/css/ion.rangeSlider.skinHTML5.css')); + $this->registerJsFile(Yii::getAlias('@web/js/ion.rangeSlider.js'),[ + 'position' => View::POS_END, + 'depends' => ['yii\web\JqueryAsset'] + ]); + $this->registerJsFile(Yii::getAlias('@web/js/filter.js'),[ + 'position' => View::POS_END, + 'depends' => ['yii\web\JqueryAsset'] + ]); +?> + 5000,'id'=> 'list-container'])?> +
    +
    + $category, + 'groups'=> $groups, + 'filter'=> $filter, + 'priceLimits' => $priceLimits, + //'filterBrands' => $filterBrands + ])?> + +
    + + + + +
    + + + + + + + + +
    + +
    + + +
    + ventolux +
    + +
    +
    + +

    'h1'])?>

    + + + + + +
    + + + + + + + + +
    + + + $productProvider, + 'itemView' => function ($model, $key, $index, $widget) use($category) { + return $this->render('_product_item',[ + 'model' => $model, + 'category' => $category + ]); + }, + 'layout' => "{items}
    {pager}", + ]) + + ?> + + + + +
    +
    + +
    +
    + + + diff --git a/frontend/views/event/_objects.php b/frontend/views/event/_objects.php new file mode 100755 index 0000000..f48a328 --- /dev/null +++ b/frontend/views/event/_objects.php @@ -0,0 +1,52 @@ + +
    + + + name?> + + +
    + + imageUrl, 'event_left', ['align' => 'left'])?> + + + + end_at) && strtotime($model->end_at) > strtotime(date("Y-m-d"))){?> +
    + + primaryKey ."'),{ + clockFace: 'DailyCounter', + language: 'ru', + classes: { + active: 'flip-clock-active', + before: 'flip-clock-before', + divider: 'flip-clock-divider', + dot: 'flip-clock-dot', + label: 'flip-clock-label', + flip: 'flip', + play: 'play', + wrapper: 'flip-clock-wrapper' + }, + }); + + clock.setTime(".(strtotime($model->end_at) - strtotime(date('Y-m-d H:i:s')))."); + clock.setCountdown(true); + clock.start();"; + $this->registerJs($js,View::POS_LOAD) ?> + + +
    +
    + + + + +
    \ No newline at end of file diff --git a/frontend/views/event/_product_item.php b/frontend/views/event/_product_item.php new file mode 100755 index 0000000..eb27592 --- /dev/null +++ b/frontend/views/event/_product_item.php @@ -0,0 +1,111 @@ +category; +?> +
    +
    +
    + +
    + name, Url::to(['catalog/product', 'product' => $model->alias]), ['class'=>'btn-product-details'] )?> +
    + +
    + + variant->price_old){?> +
    + + variant->price_old ?>грн + +
    + +
    + Цена: + + variant->price ?> + грн + +
    +
    +
    +
    Особенности
    +
    +
    +
      + +
    • Бренд: brand) ? $model->brand->name : '' ?>
    • + + getActiveProperties($category->category_id) as $group): ?> +
    • name ?> _options as $option) : ?> ValueRenderHTML ?>
    • + + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/frontend/views/event/index.php b/frontend/views/event/index.php new file mode 100755 index 0000000..60f2fa9 --- /dev/null +++ b/frontend/views/event/index.php @@ -0,0 +1,38 @@ +title = 'Акции'; +$this->params['seo']['title'] = $this->title; + +$this->params['seo']['h1'] = $this->title; + + + +?> + + +
    +
    +

    Акции

    + models as $model){ + + if($model->isActive()){ + echo $this->render('_objects',['model' => $model]); + } + + } + ?> + +
    + + +
    + +
    \ No newline at end of file diff --git a/frontend/views/event/show.php b/frontend/views/event/show.php new file mode 100755 index 0000000..1d43077 --- /dev/null +++ b/frontend/views/event/show.php @@ -0,0 +1,90 @@ + +title = $model->name; +$this->params['seo']['title'] = $this->title; + +$this->params['seo']['h1'] = $this->title; +?> + + +
    +
    +

    name?>

    +
    + image){?> + imageUrl, 'event_left', ['align' => 'left'])?> + + + end_at) && strtotime($model->end_at) > strtotime(date("Y-m-d"))){ + ?> +
    + end_at) - strtotime(date('Y-m-d H:i:s')))."); + clock.setCountdown(true); + clock.start();"; + $this->registerJs($js,View::POS_LOAD) ?> + + + +
    + +
    + body?> +
    + + + +
    + +
    + '', + 'dataProvider' => $productProvider, + 'itemView' => function ($model, $key, $index, $widget) { + return $this->render('../catalog/_product_item',[ + 'model' => $model, + 'category' => $model->category, + + ]); + }, + 'layout' => "{items}
    {pager}", + ]) + + ?> +
    +
    +
    +
    \ No newline at end of file diff --git a/frontend/views/layouts/cabinet.php b/frontend/views/layouts/cabinet.php new file mode 100755 index 0000000..02664bd --- /dev/null +++ b/frontend/views/layouts/cabinet.php @@ -0,0 +1,33 @@ +beginContent('@app/views/layouts/main.php'); +?> +
    +

    + +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    + +
    +
    +
    +endContent() ?> \ No newline at end of file diff --git a/frontend/views/layouts/main-menu.php b/frontend/views/layouts/main-menu.php new file mode 100755 index 0000000..e403971 --- /dev/null +++ b/frontend/views/layouts/main-menu.php @@ -0,0 +1,93 @@ +all(); + + +?> + + + \ No newline at end of file diff --git a/frontend/views/layouts/main.php b/frontend/views/layouts/main.php new file mode 100755 index 0000000..8fce7fd --- /dev/null +++ b/frontend/views/layouts/main.php @@ -0,0 +1,576 @@ + +beginPage() ?> + + + + head() ?> + + + + <?= Seo::widget([ 'row'=>'title'])?> + 'description'])?> + 'meta'])?> + + + + + + + + + + + + + + + + + +beginBody() ?> + + + + + +
    +
    +
    +
    +
    + + +
    +
    + + + +
    +
    +
    +
    +
      +
    • + Распродажа +
      +
        + +
      • $sale['percent']])) ?>
      • + +
      +
      +
    • +
    • 'magaziny'])) ?>
    • +
    • 'garantii'])) ?>
    • +
    • 'oplata'])) ?>
    • +
    • 'dostavka-tovarov'])) ?>
    • +
    +
    +
    + user->isGuest) { + echo Html::a('Личный кабинет', Url::to('#'), [ + 'data-toggle' => 'modal', + 'data-target' => '#myAccount', + 'class' => 'cabinet_link_', + ]); + } else { + echo Html::a('' . Yii::$app->user->identity->username . '', Url::toRoute([ 'cabinet/main' ]), [ 'class' => 'cabinet_link_' ]); + } + ?> +
    + +
    +
    +
    +
    +
    +
    +
    + + + + + + + +
    + + + + + + + + + + + + + +
    + + + + + +
    + +

    + (044) 339-92-33

    +
    + + + + + +
    + +

    + (095) 282-85-08

    + +
    + + + + + +
    + +

    + (068) 776-60-67

    +
    + + + + +
    + перезвонить мне +
    +
    +
    + render('/basket/cart', [ + 'count' => \Yii::$app->basket->getCount(), + 'sum' => \Yii::$app->basket->getSum(), + ]) + ?> +
    +
    +
    +
    +
    + +
    + beginCache('brand_list',[ + 'duration' => 3600 *24 + ])){ ?> + + render('../partial/brand_list')?> + + endCache(); } ?> +
    +
    + + beginCache('main-menu',[ + 'duration' => 3600 *24 + ])){ ?> + render('main-menu') ?> + endCache(); } ?> + +
    +
    + + + params['breadcrumbs'])) { + $links = $this->params['breadcrumbs']; + foreach($links as $index => $link) { + if(is_array($link)) { + $links[$index]['itemprop'] = 'url'; + $links[$index]['label'] = ''.$links[$index]['label'].''; + } + } + } + echo Breadcrumbs::widget([ + 'encodeLabels' => false, + 'itemTemplate' => "
  • {link}
  • \n", + 'links' => isset($links) ? $links : [], + 'homeLink' => [ + 'label' => 'Интернет-магазин светильников', + 'url' => Url::to([ '/' ]), + 'itemprop' => 'url', + ], + 'activeItemTemplate' => '
  • {link}
  • ', + ]) + ?> + + +
    + + + +
    + +
    +
    +
    +
    + Вы еще ничего не искали у нас на сайте +
    + +
    +
    +
    +
    +
    + beginCache('articles_show',[ + 'duration' => 3600*24 + ]) ){?> + Статьи + +
    + +
    +
    + + endCache(); } ?> +
    +
    + 'seo_text']); + if($seo_text){ + ?> +
    + +
    + + + + +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + + + перезвонить мне + +
    +
    +
    +
    + + +
    +
    + +
    +

    Присоединяйтесь к интернет-магазину Лiнiя Свiтла в социальных сетях. Вы всегда будете в курсе акций, распродаж и новинок.

    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +
    +
      +
    • 'magaziny'])) ?>
    • +
    • 'garantii'])) ?>
    • +
    • 'oplata'])) ?>
    • +
    • 'dostavka-tovarov'])) ?>
    • +
    • 'diskontnaya-programma'])) ?>
    • +
    • 'o-proekte'])) ?>
    • +
    • 'katalogi'])) ?>
    • +
    +
    +
    +
    +
    +
    +
    +

    © 2010- «Лiнiя свiтла» - интернет магазин продажи светильников, ламп, бра, торшеров и других осветительных систем.

    +
    + +
    +
    +
    +
    + + + + + +
    +
    +
    +
    + + + + + + + render('/modal/login_window_model_window') ?> + + + render('/modal/registration_window_model_window') ?> + + + render('/modal/forgot_password_form_model_window') ?> + + + + + + + + + + + render('/modal/my_callback_modal_window') ?> + + + + + + + + + + endBody() ?> + + +endPage() ?> \ No newline at end of file diff --git a/frontend/views/modal/forgot_password_form_model_window.php b/frontend/views/modal/forgot_password_form_model_window.php new file mode 100755 index 0000000..ddbd48b --- /dev/null +++ b/frontend/views/modal/forgot_password_form_model_window.php @@ -0,0 +1,27 @@ + \ No newline at end of file diff --git a/frontend/views/modal/login_window_model_window.php b/frontend/views/modal/login_window_model_window.php new file mode 100755 index 0000000..53744b7 --- /dev/null +++ b/frontend/views/modal/login_window_model_window.php @@ -0,0 +1,56 @@ + + \ No newline at end of file diff --git a/frontend/views/modal/my_callback_modal_window.php b/frontend/views/modal/my_callback_modal_window.php new file mode 100755 index 0000000..0bcb26a --- /dev/null +++ b/frontend/views/modal/my_callback_modal_window.php @@ -0,0 +1,51 @@ + Feedback::SCENARIO_FEEDBACK, + ]); +?> + \ No newline at end of file diff --git a/frontend/views/modal/registration_window_model_window.php b/frontend/views/modal/registration_window_model_window.php new file mode 100755 index 0000000..83fb462 --- /dev/null +++ b/frontend/views/modal/registration_window_model_window.php @@ -0,0 +1,55 @@ + + \ No newline at end of file diff --git a/frontend/views/order/_order_form.php b/frontend/views/order/_order_form.php new file mode 100755 index 0000000..8c1904c --- /dev/null +++ b/frontend/views/order/_order_form.php @@ -0,0 +1,188 @@ + + + + + + + +
    + + + + + + + + + +
    +
    + + +
    +
    + +
    +
    +
    + + + + + + getItem($model->product_variant_id); + ?> +
    + + + + + + + + + + + + +
    + +
    + getImageUrl(), 'list'); + ?> +
    +
    +
    + + getFullname() ?> + + + + + + + + + + + + + + + + + + + + + + +
    + удалить товар x +
    + Цена  + +
    + +
    +
    + Количество  + +
    + + + +
    +
    + Cумма  + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + +
    + Сумма заказа: + +
    + + +
    + +
    + + + diff --git a/frontend/views/order/index.php b/frontend/views/order/index.php new file mode 100755 index 0000000..ba16dca --- /dev/null +++ b/frontend/views/order/index.php @@ -0,0 +1,65 @@ +title = "Корзина"; +$this->params[ 'seo' ][ Seo::H1] = $this->title ; +$this->params[ 'seo' ][ Seo::TITLE] = $this->title; +/** + * @var View $this + * @var ProductVariant[] $models + * @var Basket $basket + */ +?> +session->getFlash ('success')): ?> +
    + +session->getFlash ('error')): ?> +
    + +
    + +

    Корзина

    + +
    +
    + +
    + +
    +
    + + +
    + + + +
    + + +
    +
    + +
    + +
    + + +
    + + render('_order_form',[ + 'models'=>$models, + 'basket'=>$basket + ])?> + +
    + +
    + +
    +
    +
    \ No newline at end of file diff --git a/frontend/views/order/success.php b/frontend/views/order/success.php new file mode 100755 index 0000000..806d55b --- /dev/null +++ b/frontend/views/order/success.php @@ -0,0 +1,68 @@ +session[ 'order_data' ]; + \Yii::$app->session->remove('order_data'); + $order = $order_data[ 'order' ]; + $variants = $order_data[ 'variants' ]; +?> +
    +
    +
    +
    +
    +
    + + + + + + + + + +
    + Заказ успешно осуществлён! Во время обработки вашего заказа менеджер свяжется с Вами. +

    +
    + Уникальный номер заказа: id; ?> +
    +

    +
    + Спасибо за заказ!!

    + « На главную +
    + + +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/frontend/views/partial/brand_list.php b/frontend/views/partial/brand_list.php new file mode 100755 index 0000000..de29663 --- /dev/null +++ b/frontend/views/partial/brand_list.php @@ -0,0 +1,16 @@ +where(['in_menu' => 1])->all(); +$content = ''; + +foreach($brands as $brand){ + $content .= Html::tag('li', Html::a(Html::img(ArtboxImageHelper::getImageSrc($brand->imageUrl, 'brand_item')),\yii\helpers\Url::to(['catalog/brand', 'brand' => $brand->alias]) )); + +} + + +echo Html::tag('ul',$content); + diff --git a/frontend/views/partial/main-menu.php b/frontend/views/partial/main-menu.php new file mode 100755 index 0000000..df85aab --- /dev/null +++ b/frontend/views/partial/main-menu.php @@ -0,0 +1,91 @@ +all(); +?> + + + \ No newline at end of file diff --git a/frontend/views/search/index.php b/frontend/views/search/index.php new file mode 100755 index 0000000..5091e25 --- /dev/null +++ b/frontend/views/search/index.php @@ -0,0 +1,84 @@ +params['seo']['title'] = 'Поиск'; + +$this->params['seo']['h1'] = 'Поиск'; + +$this->params['breadcrumbs'][] = 'Поиск'; +?> + + +
    +
    + +
    + + + + +
    + + + +
    + + +
    + + + +
    +
    + + + + + + + + +

    'h1'])?>

    + + + +
    + + + $productProvider, + 'itemView' => function ($model, $key, $index, $widget) { + return $this->render('../catalog/_product_item',[ + 'model' => $model, + 'category' => $model->category + ]); + }, + 'layout' => "{items}
    {pager}", + ]) + + ?> + + + + +
    +
    + + + +
    +
    + + + + diff --git a/frontend/views/site/error.php b/frontend/views/site/error.php new file mode 100755 index 0000000..c20bec5 --- /dev/null +++ b/frontend/views/site/error.php @@ -0,0 +1,112 @@ +title = 'Ошибка '.$code; + +$this->params[ 'seo' ][ Seo::TITLE] = $this->title = 'Ошибка '.$code; + +?> + + + +
    +
    404!
    +
    +

    Добро пожаловать на страницу 404!
    + Вы находитесь здесь, потому что ввели адрес страницы,
    + которая уже не существует или была перемещена по другому адресу

    +
    + +
    +

    … Возможно, запрашиваемая Вами страница была перенесена или удалена.
    + Также возможно, Вы допустили небольшую опечатку при вводе адреса – такое случается даже с нами, поэтому еще раз внимательно проверьте

    +
    + + + +
    \ No newline at end of file diff --git a/frontend/views/site/index.php b/frontend/views/site/index.php new file mode 100755 index 0000000..27e8523 --- /dev/null +++ b/frontend/views/site/index.php @@ -0,0 +1,73 @@ + + + + +
    + "HOME_SLIDER"]); ?> + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + +
    + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + +registerJs($js, View::POS_LOAD); +?> + diff --git a/frontend/views/site/requestPasswordResetToken.php b/frontend/views/site/requestPasswordResetToken.php new file mode 100755 index 0000000..dc0889a --- /dev/null +++ b/frontend/views/site/requestPasswordResetToken.php @@ -0,0 +1,36 @@ +title = 'Востановление пароля'; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +
    +
    +

    title) ?>

    + +

    Заполните ваш Email. На него будет отправлена ссылка на восстановление пароля.

    + +
    +
    + 'request-password-reset-form']); ?> + + field($model, 'email')->textInput(['autofocus' => true]) ?> + +
    + 'btn btn-primary']) ?> +
    + + +
    +
    +
    +
    +
    diff --git a/frontend/views/site/resetPassword.php b/frontend/views/site/resetPassword.php new file mode 100755 index 0000000..36ef452 --- /dev/null +++ b/frontend/views/site/resetPassword.php @@ -0,0 +1,31 @@ +title = 'Reset password'; +$this->params['breadcrumbs'][] = $this->title; +?> +
    +

    title) ?>

    + +

    Please choose your new password:

    + +
    +
    + 'reset-password-form']); ?> + + field($model, 'password')->passwordInput(['autofocus' => true]) ?> + +
    + 'btn btn-primary']) ?> +
    + + +
    +
    +
    diff --git a/frontend/views/text/index.php b/frontend/views/text/index.php new file mode 100755 index 0000000..30ef496 --- /dev/null +++ b/frontend/views/text/index.php @@ -0,0 +1,25 @@ + +title = $text->meta_title; +$this->params[ 'seo' ][ Seo::H1] = !empty($text->h1) ?$text->h1: $text->title ; +$this->params[ 'seo' ][ Seo::TITLE] = !empty($text->meta_title)? $text->meta_title : $text->title; +$this->params[ 'seo' ][ Seo::DESCRIPTION] = !empty($text->meta_description)? $text->meta_description : ''; +$this->params[ 'seo' ][ Seo::SEO_TEXT] =!empty($text->seo_text)? $text->seo_text : ''; + +?> + +
    + +
    +

    Seo::H1])?>

    +body;?> +
    +
    \ No newline at end of file diff --git a/frontend/web/.gitignore b/frontend/web/.gitignore new file mode 100755 index 0000000..a6e95c8 --- /dev/null +++ b/frontend/web/.gitignore @@ -0,0 +1,2 @@ +/index.php +/index-test.php diff --git a/frontend/web/css/comments.css b/frontend/web/css/comments.css new file mode 100755 index 0000000..45ef1a9 --- /dev/null +++ b/frontend/web/css/comments.css @@ -0,0 +1 @@ +@import "https://fonts.googleapis.com/css?family=Roboto:400,700,500&subset=cyrillic-ext,latin,cyrillic,latin-ext";.input_bl,.area_bl,.form-comm-wr,.user_name,.user_txt,.comment-panel,.answer-form,.comments-start input,.comments-start textarea,.submit_btn button,.input_bl label{box-sizing:border-box}.comments-border{width:100%;margin-top:25px;margin-bottom:27px;height:1px;background:#d2d2d2}.comments-start{width:730px;margin:0 auto;font-family:'Roboto',sans-serif;font-weight:400;color:#333}.form-comm-wr{width:100%;background:#f5f5f5;padding:20px;float:left}.input_bl{margin-top:15px;float:left}.area_bl,.input_bl{position:relative}.input_bl input,.input_bl textarea,.answer-form textarea{width:258px;height:30px;border:1px solid #d2d2d2;background:#fff;outline:none!important;border-radius:4px;padding-left:10px}.area_bl textarea,.answer-form textarea{resize:none!important;height:140px;width:585px;padding-top:7px}.input_bl input:focus,.input_bl textarea:focus,.answer-form textarea:focus{box-shadow:1px 2px 2px 0 rgba(215,215,215,0.75) inset;transition:.1s}.input_bl label{font-size:12px;color:#7d7d7d;font-weight:400;text-transform:uppercase;position:relative;width:105px;float:left;text-align:right;padding-right:10px;margin-top:9px}.submit_btn{float:right;margin-top:27px}.submit_btn button,.answer-form button{padding:0 17px;height:32px;font-weight:500;font-size:15px;color:#fff;border-top:0;border-left:0;border-right:0;border-bottom:2px solid #1e5488;background:#256caf;border-radius:4px;cursor:pointer;outline:none!important}.submit_btn button:hover,.answer-form button:hover{border-bottom:2px solid #256caf}.submit_btn button:active,.answer-form button:active{border-bottom:2px solid #1e5488;background:#1e5488}.answer-form button{float:right;margin-top:27px}.comments-wr,.comment-answer{min-height:64px;position:relative;float:left;width:100%}.answer-form{float:left;width:100%}.user-ico{width:80px;height:80px;float:left;overflow:hidden;border-radius:50%;position:absolute;top:0;left:0}.user-ico img{width:100%;height:100%}.user_data{margin-top:-2px;font-size:12px;color:#636363}.user_name{margin-top:6px;font-weight:700;font-size:15px}.user_name,.user_txt,.comment-panel,.answer-form,.user_data{width:100%;float:left;padding-left:100px}.user_txt{margin-top:8px;font-size:13px;line-height:18px}.comment-panel{width:100%;float:left;margin-top:11px}.comment-panel a:first-child{margin-left:0}.btn-comm-answer,.btn-comm-delete{font-size:13px;color:#799920;border-bottom:1px dotted #799920}.btn-comm-answer,.btn-comm-delete,.btn-comm-like,.btn-comm-dislike{float:left;margin-left:10px;text-decoration:none}.btn-comm-answer,.btn-comm-delete{height:16px;line-height:16px}.btn-comm-answer:hover,.btn-comm-delete:hover{text-decoration:none;border-bottom:0}.btn-comm-like,.btn-comm-dislike{width:14px;height:16px;background-image:url(../images/like_dislike.png);background-repeat:no-repeat}.btn-comm-like{background-position:0 0}.btn-comm-like:hover{background-position:0 -16px}.btn-comm-dislike:hover{background-position:-14px -16px}.btn-comm-dislike{background-position:-14px 0}.btn-comm-like:active,.btn-comm-dislike:active{opacity:.7}.comment-answer{margin-top:40px}.comment-answer .user-ico{left:100px}.comment-answer .user_name,.comment-answer .user_txt,.comment-answer .comment-panel,.comment-answer .answer-form,.comment-answer .user_data{padding-left:200px}.comments-wr{margin-top:40px}.answer-form{margin-top:20px}.answer-form textarea{width:100%;height:90px}.input_bl.has-error input,.input_bl.has-error textarea,.answer-form .has-error textarea{box-shadow:1px 2px 2px 0 rgba(212,0,0,0.2) inset}.input_bl .help-block,.answer-form .help-block{display:none}.required label:before{display:block;content:"*";position:absolute;top:0;right:-7px}.comments-start ul.pagination{list-style:none;text-align:center;margin-top:40px;width:100%;float:left}.comments-start ul.pagination li{display:inline}.comments-start ul.pagination li.prev.disabled span{display:none}.comments-start ul.pagination li a{padding:3px;color:#82a02f;font-size:15px;margin:0;text-decoration:none}.comments-start ul.pagination li.active a{color:#333}.field-commentmodel-email label{width: 69px;}#artbox-comment-list .empty{font-size: 14px;color: #7d7d7d;float:left;margin-top:10px;width:100%;} \ No newline at end of file diff --git a/frontend/web/css/css_header.css b/frontend/web/css/css_header.css new file mode 100755 index 0000000..e57dd9f --- /dev/null +++ b/frontend/web/css/css_header.css @@ -0,0 +1,26996 @@ +.form-group { + position: relative +} + +.required label:before { + display: block; + content: "*"; + color: #d40000; + position: absolute; + top: 0; + right: -7px +} + +.option_image_block { + height: 110px +} + +.owl-item .catalog_item { + float: none!important; + width: auto!important +} + +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100% +} + +article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary { + display: block +} + +audio,canvas,progress,video { + display: inline-block; + vertical-align: baseline +} + +audio:not([controls]) { + display: none; + height: 0 +} + +[hidden],template { + display: none +} + +a { + background-color: transparent +} + +a:active,a:hover { + outline: 0 +} + +abbr[title] { + border-bottom: 1px dotted +} + +b,strong { + font-weight: 700 +} + +dfn { + font-style: italic +} + +h1 { + font-size: 2em; + margin: .67em 0 +} + +mark { + background: #ff0; + color: #000 +} + +small { + font-size: 80% +} + +sub,sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sup { + top: -.5em +} + +sub { + bottom: -.25em +} + +img { + border: 0 +} + +svg:not(:root) { + overflow: hidden +} + +figure { + margin: 1em 40px +} + +hr { + box-sizing: content-box; + height: 0 +} + +pre { + overflow: auto +} + +code,kbd,pre,samp { + font-family: monospace,monospace; + font-size: 1em +} + +button,input,optgroup,select,textarea { + color: inherit; + font: inherit; + margin: 0 +} + +button { + overflow: visible +} + +button,select { + text-transform: none +} + +button,html input[type="button"],input[type="reset"],input[type="submit"] { + -webkit-appearance: button; + cursor: pointer +} + +button[disabled],html input[disabled] { + cursor: default +} + +button::-moz-focus-inner,input::-moz-focus-inner { + border: 0; + padding: 0 +} + +input { + line-height: normal +} + +input[type="checkbox"],input[type="radio"] { + box-sizing: border-box; + padding: 0 +} + +input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button { + height: auto +} + +input[type="search"] { + -webkit-appearance: textfield; + box-sizing: content-box +} + +input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none +} + +fieldset { + border: 1px solid silver; + margin: 0 2px; + padding: .35em .625em .75em +} + +legend { + border: 0; + padding: 0 +} + +textarea { + overflow: auto +} + +optgroup { + font-weight: 700 +} + +table { + border-collapse: collapse; + border-spacing: 0 +} + +td,th { + padding: 0 +} + +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100% +} + +article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary { + display: block +} + +audio,canvas,progress,video { + display: inline-block; + vertical-align: baseline +} + +audio:not([controls]) { + display: none; + height: 0 +} + +[hidden],template { + display: none +} + +a { + background-color: transparent +} + +a:active,a:hover { + outline: 0 +} + +abbr[title] { + border-bottom: 1px dotted +} + +b,strong { + font-weight: 700 +} + +dfn { + font-style: italic +} + +h1 { + font-size: 2em; + margin: .67em 0 +} + +mark { + background: #ff0; + color: #000 +} + +small { + font-size: 80% +} + +sub,sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sup { + top: -.5em +} + +sub { + bottom: -.25em +} + +img { + border: 0 +} + +svg:not(:root) { + overflow: hidden +} + +figure { + margin: 1em 40px +} + +hr { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0 +} + +pre { + overflow: auto +} + +code,kbd,pre,samp { + font-family: monospace,monospace; + font-size: 1em +} + +button,input,optgroup,select,textarea { + color: inherit; + font: inherit; + margin: 0 +} + +button { + overflow: visible +} + +button,select { + text-transform: none +} + +button,html input[type="button"],input[type="reset"],input[type="submit"] { + -webkit-appearance: button; + cursor: pointer +} + +button[disabled],html input[disabled] { + cursor: default +} + +button::-moz-focus-inner,input::-moz-focus-inner { + border: 0; + padding: 0 +} + +input { + line-height: normal +} + +input[type="checkbox"],input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0 +} + +input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button { + height: auto +} + +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box +} + +input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none +} + +fieldset { + border: 1px solid silver; + margin: 0 2px; + padding: .35em .625em .75em +} + +legend { + border: 0; + padding: 0 +} + +textarea { + overflow: auto +} + +optgroup { + font-weight: 700 +} + +table { + border-collapse: collapse; + border-spacing: 0 +} + +td,th { + padding: 0 +} + +@font-face { + font-family: 'Glyphicons Halflings'; + src: url(/res/fonts/glyphicons-halflings-regular.eot); + src: url(/res/fonts/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(/res/fonts/glyphicons-halflings-regular.woff2) format("woff2"),url(/res/fonts/glyphicons-halflings-regular.woff) format("woff"),url(/res/fonts/glyphicons-halflings-regular.ttf) format("truetype"),url(/res/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg") +} + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: 400; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +.glyphicon-asterisk:before { + content: "\2a" +} + +.glyphicon-plus:before { + content: "\2b" +} + +.glyphicon-euro:before,.glyphicon-eur:before { + content: "\20ac" +} + +.glyphicon-minus:before { + content: "\2212" +} + +.glyphicon-cloud:before { + content: "\2601" +} + +.glyphicon-envelope:before { + content: "\2709" +} + +.glyphicon-pencil:before { + content: "\270f" +} + +.glyphicon-glass:before { + content: "\e001" +} + +.glyphicon-music:before { + content: "\e002" +} + +.glyphicon-search:before { + content: "\e003" +} + +.glyphicon-heart:before { + content: "\e005" +} + +.glyphicon-star:before { + content: "\e006" +} + +.glyphicon-star-empty:before { + content: "\e007" +} + +.glyphicon-user:before { + content: "\e008" +} + +.glyphicon-film:before { + content: "\e009" +} + +.glyphicon-th-large:before { + content: "\e010" +} + +.glyphicon-th:before { + content: "\e011" +} + +.glyphicon-th-list:before { + content: "\e012" +} + +.glyphicon-ok:before { + content: "\e013" +} + +.glyphicon-remove:before { + content: "\e014" +} + +.glyphicon-zoom-in:before { + content: "\e015" +} + +.glyphicon-zoom-out:before { + content: "\e016" +} + +.glyphicon-off:before { + content: "\e017" +} + +.glyphicon-signal:before { + content: "\e018" +} + +.glyphicon-cog:before { + content: "\e019" +} + +.glyphicon-trash:before { + content: "\e020" +} + +.glyphicon-home:before { + content: "\e021" +} + +.glyphicon-file:before { + content: "\e022" +} + +.glyphicon-time:before { + content: "\e023" +} + +.glyphicon-road:before { + content: "\e024" +} + +.glyphicon-download-alt:before { + content: "\e025" +} + +.glyphicon-download:before { + content: "\e026" +} + +.glyphicon-upload:before { + content: "\e027" +} + +.glyphicon-inbox:before { + content: "\e028" +} + +.glyphicon-play-circle:before { + content: "\e029" +} + +.glyphicon-repeat:before { + content: "\e030" +} + +.glyphicon-refresh:before { + content: "\e031" +} + +.glyphicon-list-alt:before { + content: "\e032" +} + +.glyphicon-lock:before { + content: "\e033" +} + +.glyphicon-flag:before { + content: "\e034" +} + +.glyphicon-headphones:before { + content: "\e035" +} + +.glyphicon-volume-off:before { + content: "\e036" +} + +.glyphicon-volume-down:before { + content: "\e037" +} + +.glyphicon-volume-up:before { + content: "\e038" +} + +.glyphicon-qrcode:before { + content: "\e039" +} + +.glyphicon-barcode:before { + content: "\e040" +} + +.glyphicon-tag:before { + content: "\e041" +} + +.glyphicon-tags:before { + content: "\e042" +} + +.glyphicon-book:before { + content: "\e043" +} + +.glyphicon-bookmark:before { + content: "\e044" +} + +.glyphicon-print:before { + content: "\e045" +} + +.glyphicon-camera:before { + content: "\e046" +} + +.glyphicon-font:before { + content: "\e047" +} + +.glyphicon-bold:before { + content: "\e048" +} + +.glyphicon-italic:before { + content: "\e049" +} + +.glyphicon-text-height:before { + content: "\e050" +} + +.glyphicon-text-width:before { + content: "\e051" +} + +.glyphicon-align-left:before { + content: "\e052" +} + +.glyphicon-align-center:before { + content: "\e053" +} + +.glyphicon-align-right:before { + content: "\e054" +} + +.glyphicon-align-justify:before { + content: "\e055" +} + +.glyphicon-list:before { + content: "\e056" +} + +.glyphicon-indent-left:before { + content: "\e057" +} + +.glyphicon-indent-right:before { + content: "\e058" +} + +.glyphicon-facetime-video:before { + content: "\e059" +} + +.glyphicon-picture:before { + content: "\e060" +} + +.glyphicon-map-marker:before { + content: "\e062" +} + +.glyphicon-adjust:before { + content: "\e063" +} + +.glyphicon-tint:before { + content: "\e064" +} + +.glyphicon-edit:before { + content: "\e065" +} + +.glyphicon-share:before { + content: "\e066" +} + +.glyphicon-check:before { + content: "\e067" +} + +.glyphicon-move:before { + content: "\e068" +} + +.glyphicon-step-backward:before { + content: "\e069" +} + +.glyphicon-fast-backward:before { + content: "\e070" +} + +.glyphicon-backward:before { + content: "\e071" +} + +.glyphicon-play:before { + content: "\e072" +} + +.glyphicon-pause:before { + content: "\e073" +} + +.glyphicon-stop:before { + content: "\e074" +} + +.glyphicon-forward:before { + content: "\e075" +} + +.glyphicon-fast-forward:before { + content: "\e076" +} + +.glyphicon-step-forward:before { + content: "\e077" +} + +.glyphicon-eject:before { + content: "\e078" +} + +.glyphicon-chevron-left:before { + content: "\e079" +} + +.glyphicon-chevron-right:before { + content: "\e080" +} + +.glyphicon-plus-sign:before { + content: "\e081" +} + +.glyphicon-minus-sign:before { + content: "\e082" +} + +.glyphicon-remove-sign:before { + content: "\e083" +} + +.glyphicon-ok-sign:before { + content: "\e084" +} + +.glyphicon-question-sign:before { + content: "\e085" +} + +.glyphicon-info-sign:before { + content: "\e086" +} + +.glyphicon-screenshot:before { + content: "\e087" +} + +.glyphicon-remove-circle:before { + content: "\e088" +} + +.glyphicon-ok-circle:before { + content: "\e089" +} + +.glyphicon-ban-circle:before { + content: "\e090" +} + +.glyphicon-arrow-left:before { + content: "\e091" +} + +.glyphicon-arrow-right:before { + content: "\e092" +} + +.glyphicon-arrow-up:before { + content: "\e093" +} + +.glyphicon-arrow-down:before { + content: "\e094" +} + +.glyphicon-share-alt:before { + content: "\e095" +} + +.glyphicon-resize-full:before { + content: "\e096" +} + +.glyphicon-resize-small:before { + content: "\e097" +} + +.glyphicon-exclamation-sign:before { + content: "\e101" +} + +.glyphicon-gift:before { + content: "\e102" +} + +.glyphicon-leaf:before { + content: "\e103" +} + +.glyphicon-fire:before { + content: "\e104" +} + +.glyphicon-eye-open:before { + content: "\e105" +} + +.glyphicon-eye-close:before { + content: "\e106" +} + +.glyphicon-warning-sign:before { + content: "\e107" +} + +.glyphicon-plane:before { + content: "\e108" +} + +.glyphicon-calendar:before { + content: "\e109" +} + +.glyphicon-random:before { + content: "\e110" +} + +.glyphicon-comment:before { + content: "\e111" +} + +.glyphicon-magnet:before { + content: "\e112" +} + +.glyphicon-chevron-up:before { + content: "\e113" +} + +.glyphicon-chevron-down:before { + content: "\e114" +} + +.glyphicon-retweet:before { + content: "\e115" +} + +.glyphicon-shopping-cart:before { + content: "\e116" +} + +.glyphicon-folder-close:before { + content: "\e117" +} + +.glyphicon-folder-open:before { + content: "\e118" +} + +.glyphicon-resize-vertical:before { + content: "\e119" +} + +.glyphicon-resize-horizontal:before { + content: "\e120" +} + +.glyphicon-hdd:before { + content: "\e121" +} + +.glyphicon-bullhorn:before { + content: "\e122" +} + +.glyphicon-bell:before { + content: "\e123" +} + +.glyphicon-certificate:before { + content: "\e124" +} + +.glyphicon-thumbs-up:before { + content: "\e125" +} + +.glyphicon-thumbs-down:before { + content: "\e126" +} + +.glyphicon-hand-right:before { + content: "\e127" +} + +.glyphicon-hand-left:before { + content: "\e128" +} + +.glyphicon-hand-up:before { + content: "\e129" +} + +.glyphicon-hand-down:before { + content: "\e130" +} + +.glyphicon-circle-arrow-right:before { + content: "\e131" +} + +.glyphicon-circle-arrow-left:before { + content: "\e132" +} + +.glyphicon-circle-arrow-up:before { + content: "\e133" +} + +.glyphicon-circle-arrow-down:before { + content: "\e134" +} + +.glyphicon-globe:before { + content: "\e135" +} + +.glyphicon-wrench:before { + content: "\e136" +} + +.glyphicon-tasks:before { + content: "\e137" +} + +.glyphicon-filter:before { + content: "\e138" +} + +.glyphicon-briefcase:before { + content: "\e139" +} + +.glyphicon-fullscreen:before { + content: "\e140" +} + +.glyphicon-dashboard:before { + content: "\e141" +} + +.glyphicon-paperclip:before { + content: "\e142" +} + +.glyphicon-heart-empty:before { + content: "\e143" +} + +.glyphicon-link:before { + content: "\e144" +} + +.glyphicon-phone:before { + content: "\e145" +} + +.glyphicon-pushpin:before { + content: "\e146" +} + +.glyphicon-usd:before { + content: "\e148" +} + +.glyphicon-gbp:before { + content: "\e149" +} + +.glyphicon-sort:before { + content: "\e150" +} + +.glyphicon-sort-by-alphabet:before { + content: "\e151" +} + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152" +} + +.glyphicon-sort-by-order:before { + content: "\e153" +} + +.glyphicon-sort-by-order-alt:before { + content: "\e154" +} + +.glyphicon-sort-by-attributes:before { + content: "\e155" +} + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156" +} + +.glyphicon-unchecked:before { + content: "\e157" +} + +.glyphicon-expand:before { + content: "\e158" +} + +.glyphicon-collapse-down:before { + content: "\e159" +} + +.glyphicon-collapse-up:before { + content: "\e160" +} + +.glyphicon-log-in:before { + content: "\e161" +} + +.glyphicon-flash:before { + content: "\e162" +} + +.glyphicon-log-out:before { + content: "\e163" +} + +.glyphicon-new-window:before { + content: "\e164" +} + +.glyphicon-record:before { + content: "\e165" +} + +.glyphicon-save:before { + content: "\e166" +} + +.glyphicon-open:before { + content: "\e167" +} + +.glyphicon-saved:before { + content: "\e168" +} + +.glyphicon-import:before { + content: "\e169" +} + +.glyphicon-export:before { + content: "\e170" +} + +.glyphicon-send:before { + content: "\e171" +} + +.glyphicon-floppy-disk:before { + content: "\e172" +} + +.glyphicon-floppy-saved:before { + content: "\e173" +} + +.glyphicon-floppy-remove:before { + content: "\e174" +} + +.glyphicon-floppy-save:before { + content: "\e175" +} + +.glyphicon-floppy-open:before { + content: "\e176" +} + +.glyphicon-credit-card:before { + content: "\e177" +} + +.glyphicon-transfer:before { + content: "\e178" +} + +.glyphicon-cutlery:before { + content: "\e179" +} + +.glyphicon-header:before { + content: "\e180" +} + +.glyphicon-compressed:before { + content: "\e181" +} + +.glyphicon-earphone:before { + content: "\e182" +} + +.glyphicon-phone-alt:before { + content: "\e183" +} + +.glyphicon-tower:before { + content: "\e184" +} + +.glyphicon-stats:before { + content: "\e185" +} + +.glyphicon-sd-video:before { + content: "\e186" +} + +.glyphicon-hd-video:before { + content: "\e187" +} + +.glyphicon-subtitles:before { + content: "\e188" +} + +.glyphicon-sound-stereo:before { + content: "\e189" +} + +.glyphicon-sound-dolby:before { + content: "\e190" +} + +.glyphicon-sound-5-1:before { + content: "\e191" +} + +.glyphicon-sound-6-1:before { + content: "\e192" +} + +.glyphicon-sound-7-1:before { + content: "\e193" +} + +.glyphicon-copyright-mark:before { + content: "\e194" +} + +.glyphicon-registration-mark:before { + content: "\e195" +} + +.glyphicon-cloud-download:before { + content: "\e197" +} + +.glyphicon-cloud-upload:before { + content: "\e198" +} + +.glyphicon-tree-conifer:before { + content: "\e199" +} + +.glyphicon-tree-deciduous:before { + content: "\e200" +} + +.glyphicon-cd:before { + content: "\e201" +} + +.glyphicon-save-file:before { + content: "\e202" +} + +.glyphicon-open-file:before { + content: "\e203" +} + +.glyphicon-level-up:before { + content: "\e204" +} + +.glyphicon-copy:before { + content: "\e205" +} + +.glyphicon-paste:before { + content: "\e206" +} + +.glyphicon-alert:before { + content: "\e209" +} + +.glyphicon-equalizer:before { + content: "\e210" +} + +.glyphicon-king:before { + content: "\e211" +} + +.glyphicon-queen:before { + content: "\e212" +} + +.glyphicon-pawn:before { + content: "\e213" +} + +.glyphicon-bishop:before { + content: "\e214" +} + +.glyphicon-knight:before { + content: "\e215" +} + +.glyphicon-baby-formula:before { + content: "\e216" +} + +.glyphicon-tent:before { + content: "\26fa" +} + +.glyphicon-blackboard:before { + content: "\e218" +} + +.glyphicon-bed:before { + content: "\e219" +} + +.glyphicon-apple:before { + content: "\f8ff" +} + +.glyphicon-erase:before { + content: "\e221" +} + +.glyphicon-hourglass:before { + content: "\231b" +} + +.glyphicon-lamp:before { + content: "\e223" +} + +.glyphicon-duplicate:before { + content: "\e224" +} + +.glyphicon-piggy-bank:before { + content: "\e225" +} + +.glyphicon-scissors:before { + content: "\e226" +} + +.glyphicon-bitcoin:before { + content: "\e227" +} + +.glyphicon-btc:before { + content: "\e227" +} + +.glyphicon-xbt:before { + content: "\e227" +} + +.glyphicon-yen:before { + content: "\00a5" +} + +.glyphicon-jpy:before { + content: "\00a5" +} + +.glyphicon-ruble:before { + content: "\20bd" +} + +.glyphicon-rub:before { + content: "\20bd" +} + +.glyphicon-scale:before { + content: "\e230" +} + +.glyphicon-ice-lolly:before { + content: "\e231" +} + +.glyphicon-ice-lolly-tasted:before { + content: "\e232" +} + +.glyphicon-education:before { + content: "\e233" +} + +.glyphicon-option-horizontal:before { + content: "\e234" +} + +.glyphicon-option-vertical:before { + content: "\e235" +} + +.glyphicon-menu-hamburger:before { + content: "\e236" +} + +.glyphicon-modal-window:before { + content: "\e237" +} + +.glyphicon-oil:before { + content: "\e238" +} + +.glyphicon-grain:before { + content: "\e239" +} + +.glyphicon-sunglasses:before { + content: "\e240" +} + +.glyphicon-text-size:before { + content: "\e241" +} + +.glyphicon-text-color:before { + content: "\e242" +} + +.glyphicon-text-background:before { + content: "\e243" +} + +.glyphicon-object-align-top:before { + content: "\e244" +} + +.glyphicon-object-align-bottom:before { + content: "\e245" +} + +.glyphicon-object-align-horizontal:before { + content: "\e246" +} + +.glyphicon-object-align-left:before { + content: "\e247" +} + +.glyphicon-object-align-vertical:before { + content: "\e248" +} + +.glyphicon-object-align-right:before { + content: "\e249" +} + +.glyphicon-triangle-right:before { + content: "\e250" +} + +.glyphicon-triangle-left:before { + content: "\e251" +} + +.glyphicon-triangle-bottom:before { + content: "\e252" +} + +.glyphicon-triangle-top:before { + content: "\e253" +} + +.glyphicon-console:before { + content: "\e254" +} + +.glyphicon-superscript:before { + content: "\e255" +} + +.glyphicon-subscript:before { + content: "\e256" +} + +.glyphicon-menu-left:before { + content: "\e257" +} + +.glyphicon-menu-right:before { + content: "\e258" +} + +.glyphicon-menu-down:before { + content: "\e259" +} + +.glyphicon-menu-up:before { + content: "\e260" +} + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +:before,:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0,0,0,0) +} + +input,button,select,textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit +} + +a { + color: #337ab7; + text-decoration: none +} + +a:hover,a:focus { + color: #23527c; + text-decoration: underline +} + +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +figure { + margin: 0 +} + +img { + vertical-align: middle +} + +.img-responsive,.thumbnail > img,.thumbnail a > img,.carousel-inner > .item > img,.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto +} + +.img-rounded { + border-radius: 6px +} + +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto +} + +.img-circle { + border-radius: 50% +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0 +} + +.sr-only-focusable:active,.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto +} + +[role="button"] { + cursor: pointer +} + +table { + background-color: transparent +} + +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left +} + +th { + text-align: left +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px +} + +.table > thead > tr > th,.table > tbody > tr > th,.table > tfoot > tr > th,.table > thead > tr > td,.table > tbody > tr > td,.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd +} + +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd +} + +.table > caption + thead > tr:first-child > th,.table > colgroup + thead > tr:first-child > th,.table > thead:first-child > tr:first-child > th,.table > caption + thead > tr:first-child > td,.table > colgroup + thead > tr:first-child > td,.table > thead:first-child > tr:first-child > td { + border-top: 0 +} + +.table > tbody + tbody { + border-top: 2px solid #ddd +} + +.table .table { + background-color: #fff +} + +.table-condensed > thead > tr > th,.table-condensed > tbody > tr > th,.table-condensed > tfoot > tr > th,.table-condensed > thead > tr > td,.table-condensed > tbody > tr > td,.table-condensed > tfoot > tr > td { + padding: 5px +} + +.table-bordered { + border: 1px solid #ddd +} + +.table-bordered > thead > tr > th,.table-bordered > tbody > tr > th,.table-bordered > tfoot > tr > th,.table-bordered > thead > tr > td,.table-bordered > tbody > tr > td,.table-bordered > tfoot > tr > td { + border: 1px solid #ddd +} + +.table-bordered > thead > tr > th,.table-bordered > thead > tr > td { + border-bottom-width: 2px +} + +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9 +} + +.table-hover > tbody > tr:hover { + background-color: #f5f5f5 +} + +table col[class*="col-"] { + position: static; + float: none; + display: table-column +} + +table td[class*="col-"],table th[class*="col-"] { + position: static; + float: none; + display: table-cell +} + +.table > thead > tr > td.active,.table > tbody > tr > td.active,.table > tfoot > tr > td.active,.table > thead > tr > th.active,.table > tbody > tr > th.active,.table > tfoot > tr > th.active,.table > thead > tr.active > td,.table > tbody > tr.active > td,.table > tfoot > tr.active > td,.table > thead > tr.active > th,.table > tbody > tr.active > th,.table > tfoot > tr.active > th { + background-color: #f5f5f5 +} + +.table-hover > tbody > tr > td.active:hover,.table-hover > tbody > tr > th.active:hover,.table-hover > tbody > tr.active:hover > td,.table-hover > tbody > tr:hover > .active,.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8 +} + +.table > thead > tr > td.success,.table > tbody > tr > td.success,.table > tfoot > tr > td.success,.table > thead > tr > th.success,.table > tbody > tr > th.success,.table > tfoot > tr > th.success,.table > thead > tr.success > td,.table > tbody > tr.success > td,.table > tfoot > tr.success > td,.table > thead > tr.success > th,.table > tbody > tr.success > th,.table > tfoot > tr.success > th { + background-color: #dff0d8 +} + +.table-hover > tbody > tr > td.success:hover,.table-hover > tbody > tr > th.success:hover,.table-hover > tbody > tr.success:hover > td,.table-hover > tbody > tr:hover > .success,.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6 +} + +.table > thead > tr > td.info,.table > tbody > tr > td.info,.table > tfoot > tr > td.info,.table > thead > tr > th.info,.table > tbody > tr > th.info,.table > tfoot > tr > th.info,.table > thead > tr.info > td,.table > tbody > tr.info > td,.table > tfoot > tr.info > td,.table > thead > tr.info > th,.table > tbody > tr.info > th,.table > tfoot > tr.info > th { + background-color: #d9edf7 +} + +.table-hover > tbody > tr > td.info:hover,.table-hover > tbody > tr > th.info:hover,.table-hover > tbody > tr.info:hover > td,.table-hover > tbody > tr:hover > .info,.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3 +} + +.table > thead > tr > td.warning,.table > tbody > tr > td.warning,.table > tfoot > tr > td.warning,.table > thead > tr > th.warning,.table > tbody > tr > th.warning,.table > tfoot > tr > th.warning,.table > thead > tr.warning > td,.table > tbody > tr.warning > td,.table > tfoot > tr.warning > td,.table > thead > tr.warning > th,.table > tbody > tr.warning > th,.table > tfoot > tr.warning > th { + background-color: #fcf8e3 +} + +.table-hover > tbody > tr > td.warning:hover,.table-hover > tbody > tr > th.warning:hover,.table-hover > tbody > tr.warning:hover > td,.table-hover > tbody > tr:hover > .warning,.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc +} + +.table > thead > tr > td.danger,.table > tbody > tr > td.danger,.table > tfoot > tr > td.danger,.table > thead > tr > th.danger,.table > tbody > tr > th.danger,.table > tfoot > tr > th.danger,.table > thead > tr.danger > td,.table > tbody > tr.danger > td,.table > tfoot > tr.danger > td,.table > thead > tr.danger > th,.table > tbody > tr.danger > th,.table > tfoot > tr.danger > th { + background-color: #f2dede +} + +.table-hover > tbody > tr > td.danger:hover,.table-hover > tbody > tr > th.danger:hover,.table-hover > tbody > tr.danger:hover > td,.table-hover > tbody > tr:hover > .danger,.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc +} + +.table-responsive { + overflow-x: auto; + min-height: .01% +} + +@media screen and (max-width: 767px) { + .table-responsive { + width:100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd + } + + .table-responsive > .table { + margin-bottom: 0 + } + + .table-responsive > .table > thead > tr > th,.table-responsive > .table > tbody > tr > th,.table-responsive > .table > tfoot > tr > th,.table-responsive > .table > thead > tr > td,.table-responsive > .table > tbody > tr > td,.table-responsive > .table > tfoot > tr > td { + white-space: nowrap + } + + .table-responsive > .table-bordered { + border: 0 + } + + .table-responsive > .table-bordered > thead > tr > th:first-child,.table-responsive > .table-bordered > tbody > tr > th:first-child,.table-responsive > .table-bordered > tfoot > tr > th:first-child,.table-responsive > .table-bordered > thead > tr > td:first-child,.table-responsive > .table-bordered > tbody > tr > td:first-child,.table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0 + } + + .table-responsive > .table-bordered > thead > tr > th:last-child,.table-responsive > .table-bordered > tbody > tr > th:last-child,.table-responsive > .table-bordered > tfoot > tr > th:last-child,.table-responsive > .table-bordered > thead > tr > td:last-child,.table-responsive > .table-bordered > tbody > tr > td:last-child,.table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0 + } + + .table-responsive > .table-bordered > tbody > tr:last-child > th,.table-responsive > .table-bordered > tfoot > tr:last-child > th,.table-responsive > .table-bordered > tbody > tr:last-child > td,.table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0 + } +} + +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0 +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5 +} + +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: 700 +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +input[type="radio"],input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal +} + +input[type="file"] { + display: block +} + +input[type="range"] { + display: block; + width: 100% +} + +select[multiple],select[size] { + height: auto +} + +input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555 +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); + -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s +} + +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6) +} + +.form-control::-moz-placeholder { + color: #999; + opacity: 1 +} + +.form-control:-ms-input-placeholder { + color: #999 +} + +.form-control::-webkit-input-placeholder { + color: #999 +} + +.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1 +} + +.form-control[disabled],fieldset[disabled] .form-control { + cursor: not-allowed +} + +textarea.form-control { + height: auto +} + +input[type="search"] { + -webkit-appearance: none +} + +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control { + line-height:34px + } + + input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"] { + line-height: 30px + } + + input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"] { + line-height: 46px + } +} + +.form-group { + margin-bottom: 15px +} + +.radio,.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px +} + +.radio label,.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: 400; + cursor: pointer +} + +.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9 +} + +.radio + .radio,.checkbox + .checkbox { + margin-top: -5px +} + +.radio-inline,.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: 400; + cursor: pointer +} + +.radio-inline + .radio-inline,.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px +} + +input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed +} + +.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline { + cursor: not-allowed +} + +.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label { + cursor: not-allowed +} + +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; + min-height: 34px +} + +.form-control-static.input-lg,.form-control-static.input-sm { + padding-left: 0; + padding-right: 0 +} + +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +select.input-sm { + height: 30px; + line-height: 30px +} + +textarea.input-sm,select[multiple].input-sm { + height: auto +} + +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.form-group-sm select.form-control { + height: 30px; + line-height: 30px +} + +.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control { + height: auto +} + +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5 +} + +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px +} + +select.input-lg { + height: 46px; + line-height: 46px +} + +textarea.input-lg,select[multiple].input-lg { + height: auto +} + +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px +} + +.form-group-lg select.form-control { + height: 46px; + line-height: 46px +} + +.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control { + height: auto +} + +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333 +} + +.has-feedback { + position: relative +} + +.has-feedback .form-control { + padding-right: 42.5px +} + +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none +} + +.input-lg + .form-control-feedback,.input-group-lg + .form-control-feedback,.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px +} + +.input-sm + .form-control-feedback,.input-group-sm + .form-control-feedback,.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px +} + +.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label { + color: #3c763d +} + +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.075) +} + +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168 +} + +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8 +} + +.has-success .form-control-feedback { + color: #3c763d +} + +.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label { + color: #8a6d3b +} + +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.075) +} + +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b +} + +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3 +} + +.has-warning .form-control-feedback { + color: #8a6d3b +} + +.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label { + color: #a94442 +} + +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.075) +} + +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483 +} + +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede +} + +.has-error .form-control-feedback { + color: #a94442 +} + +.has-feedback label ~ .form-control-feedback { + top: 25px +} + +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0 +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373 +} + +@media (min-width: 768px) { + .form-inline .form-group { + display:inline-block; + margin-bottom: 0; + vertical-align: middle + } + + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle + } + + .form-inline .form-control-static { + display: inline-block + } + + .form-inline .input-group { + display: inline-table; + vertical-align: middle + } + + .form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control { + width: auto + } + + .form-inline .input-group > .form-control { + width: 100% + } + + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle + } + + .form-inline .radio,.form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle + } + + .form-inline .radio label,.form-inline .checkbox label { + padding-left: 0 + } + + .form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0 + } + + .form-inline .has-feedback .form-control-feedback { + top: 0 + } +} + +.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px +} + +.form-horizontal .radio,.form-horizontal .checkbox { + min-height: 27px +} + +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align:right; + margin-bottom: 0; + padding-top: 7px + } +} + +.form-horizontal .has-feedback .form-control-feedback { + right: 15px +} + +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top:14.333333px; + font-size: 18px + } +} + +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top:6px; + font-size: 12px + } +} + +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: 400; + text-align: center; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none +} + +.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +.btn:hover,.btn:focus,.btn.focus { + color: #333; + text-decoration: none +} + +.btn:active,.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125); + box-shadow: inset 0 3px 5px rgba(0,0,0,0.125) +} + +.btn.disabled,.btn[disabled],fieldset[disabled] .btn { + cursor: not-allowed; + opacity: .65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none +} + +a.btn.disabled,fieldset[disabled] a.btn { + pointer-events: none +} + +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc +} + +.btn-default:focus,.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c +} + +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad +} + +.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad +} + +.btn-default:active:hover,.btn-default.active:hover,.open > .dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open > .dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c +} + +.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default { + background-image: none +} + +.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc +} + +.btn-default .badge { + color: #fff; + background-color: #333 +} + +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4 +} + +.btn-primary:focus,.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40 +} + +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74 +} + +.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74 +} + +.btn-primary:active:hover,.btn-primary.active:hover,.open > .dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open > .dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40 +} + +.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary { + background-image: none +} + +.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4 +} + +.btn-primary .badge { + color: #337ab7; + background-color: #fff +} + +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c +} + +.btn-success:focus,.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625 +} + +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439 +} + +.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439 +} + +.btn-success:active:hover,.btn-success.active:hover,.open > .dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open > .dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625 +} + +.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success { + background-image: none +} + +.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c +} + +.btn-success .badge { + color: #5cb85c; + background-color: #fff +} + +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da +} + +.btn-info:focus,.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85 +} + +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc +} + +.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc +} + +.btn-info:active:hover,.btn-info.active:hover,.open > .dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open > .dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85 +} + +.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info { + background-image: none +} + +.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da +} + +.btn-info .badge { + color: #5bc0de; + background-color: #fff +} + +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236 +} + +.btn-warning:focus,.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d +} + +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512 +} + +.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512 +} + +.btn-warning:active:hover,.btn-warning.active:hover,.open > .dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open > .dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d +} + +.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning { + background-image: none +} + +.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236 +} + +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff +} + +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a +} + +.btn-danger:focus,.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19 +} + +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925 +} + +.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925 +} + +.btn-danger:active:hover,.btn-danger.active:hover,.open > .dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open > .dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19 +} + +.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger { + background-image: none +} + +.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a +} + +.btn-danger .badge { + color: #d9534f; + background-color: #fff +} + +.btn-link { + color: #337ab7; + font-weight: 400; + border-radius: 0 +} + +.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none +} + +.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active { + border-color: transparent +} + +.btn-link:hover,.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent +} + +.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none +} + +.btn-lg,.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px +} + +.btn-sm,.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.btn-xs,.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.btn-block { + display: block; + width: 100% +} + +.btn-block + .btn-block { + margin-top: 5px +} + +input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block { + width: 100% +} + +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear +} + +.fade.in { + opacity: 1 +} + +.collapse { + display: none +} + +.collapse.in { + display: block +} + +tr.collapse.in { + display: table-row +} + +tbody.collapse.in { + display: table-row-group +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height,visibility; + -o-transition-property: height,visibility; + transition-property: height,visibility; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent +} + +.dropup,.dropdown { + position: relative +} + +.dropdown-toggle:focus { + outline: 0 +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0,0,0,0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175); + box-shadow: 0 6px 12px rgba(0,0,0,0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box +} + +.dropdown-menu.pull-right { + right: 0; + left: auto +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5 +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.42857143; + color: #333; + white-space: nowrap +} + +.dropdown-menu > li > a:hover,.dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5 +} + +.dropdown-menu > .active > a,.dropdown-menu > .active > a:hover,.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + outline: 0; + background-color: #337ab7 +} + +.dropdown-menu > .disabled > a,.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus { + color: #777 +} + +.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + cursor: not-allowed +} + +.open > .dropdown-menu { + display: block +} + +.open > a { + outline: 0 +} + +.dropdown-menu-right { + left: auto; + right: 0 +} + +.dropdown-menu-left { + left: 0; + right: auto +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap +} + +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990 +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto +} + +.dropup .caret,.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; + content: "" +} + +.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left:auto; + right: 0 + } + + .navbar-right .dropdown-menu-left { + left: 0; + right: auto + } +} + +.btn-group,.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle +} + +.btn-group > .btn,.btn-group-vertical > .btn { + position: relative; + float: left +} + +.btn-group > .btn:hover,.btn-group-vertical > .btn:hover,.btn-group > .btn:focus,.btn-group-vertical > .btn:focus,.btn-group > .btn:active,.btn-group-vertical > .btn:active,.btn-group > .btn.active,.btn-group-vertical > .btn.active { + z-index: 2 +} + +.btn-group .btn + .btn,.btn-group .btn + .btn-group,.btn-group .btn-group + .btn,.btn-group .btn-group + .btn-group { + margin-left: -1px +} + +.btn-toolbar { + margin-left: -5px +} + +.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group { + float: left +} + +.btn-toolbar > .btn,.btn-toolbar > .btn-group,.btn-toolbar > .input-group { + margin-left: 5px +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0 +} + +.btn-group > .btn:first-child { + margin-left: 0 +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0 +} + +.btn-group > .btn:last-child:not(:first-child),.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.btn-group > .btn-group { + float: left +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0 +} + +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0 +} + +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle { + outline: 0 +} + +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125); + box-shadow: inset 0 3px 5px rgba(0,0,0,0.125) +} + +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none +} + +.btn .caret { + margin-left: 0 +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0 +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px +} + +.btn-group-vertical > .btn,.btn-group-vertical > .btn-group,.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100% +} + +.btn-group-vertical > .btn-group > .btn { + float: none +} + +.btn-group-vertical > .btn + .btn,.btn-group-vertical > .btn + .btn-group,.btn-group-vertical > .btn-group + .btn,.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0 +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0 +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0 +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate +} + +.btn-group-justified > .btn,.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1% +} + +.btn-group-justified > .btn-group .btn { + width: 100% +} + +.btn-group-justified > .btn-group .dropdown-menu { + left: auto +} + +[data-toggle="buttons"] > .btn input[type="radio"],[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],[data-toggle="buttons"] > .btn input[type="checkbox"],[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0,0,0,0); + pointer-events: none +} + +.input-group { + position: relative; + display: table; + border-collapse: separate +} + +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0 +} + +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0 +} + +.input-group-lg > .form-control,.input-group-lg > .input-group-addon,.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px +} + +select.input-group-lg > .form-control,select.input-group-lg > .input-group-addon,select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px +} + +textarea.input-group-lg > .form-control,textarea.input-group-lg > .input-group-addon,textarea.input-group-lg > .input-group-btn > .btn,select[multiple].input-group-lg > .form-control,select[multiple].input-group-lg > .input-group-addon,select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto +} + +.input-group-sm > .form-control,.input-group-sm > .input-group-addon,.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +select.input-group-sm > .form-control,select.input-group-sm > .input-group-addon,select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px +} + +textarea.input-group-sm > .form-control,textarea.input-group-sm > .input-group-addon,textarea.input-group-sm > .input-group-btn > .btn,select[multiple].input-group-sm > .form-control,select[multiple].input-group-sm > .input-group-addon,select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto +} + +.input-group-addon,.input-group-btn,.input-group .form-control { + display: table-cell +} + +.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0 +} + +.input-group-addon,.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: 400; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px +} + +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px +} + +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px +} + +.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"] { + margin-top: 0 +} + +.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group > .btn,.input-group-btn:first-child > .dropdown-toggle,.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0 +} + +.input-group-addon:first-child { + border-right: 0 +} + +.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group > .btn,.input-group-btn:last-child > .dropdown-toggle,.input-group-btn:first-child > .btn:not(:first-child),.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.input-group-addon:last-child { + border-left: 0 +} + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap +} + +.input-group-btn > .btn { + position: relative +} + +.input-group-btn > .btn + .btn { + margin-left: -1px +} + +.input-group-btn > .btn:hover,.input-group-btn > .btn:focus,.input-group-btn > .btn:active { + z-index: 2 +} + +.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group { + margin-right: -1px +} + +.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px +} + +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none +} + +.nav > li { + position: relative; + display: block +} + +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px +} + +.nav > li > a:hover,.nav > li > a:focus { + text-decoration: none; + background-color: #eee +} + +.nav > li.disabled > a { + color: #777 +} + +.nav > li.disabled > a:hover,.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + background-color: transparent; + cursor: not-allowed +} + +.nav .open > a,.nav .open > a:hover,.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7 +} + +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5 +} + +.nav > li > a > img { + max-width: none +} + +.nav-tabs { + border-bottom: 1px solid #ddd +} + +.nav-tabs > li { + float: left; + margin-bottom: -1px +} + +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0 +} + +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd +} + +.nav-tabs > li.active > a,.nav-tabs > li.active > a:hover,.nav-tabs > li.active > a:focus { + color: #555; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default +} + +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0 +} + +.nav-tabs.nav-justified > li { + float: none +} + +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px +} + +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display:table-cell; + width: 1% + } + + .nav-tabs.nav-justified > li > a { + margin-bottom: 0 + } +} + +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px +} + +.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom:1px solid #ddd; + border-radius: 4px 4px 0 0 + } + + .nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff + } +} + +.nav-pills > li { + float: left +} + +.nav-pills > li > a { + border-radius: 4px +} + +.nav-pills > li + li { + margin-left: 2px +} + +.nav-pills > li.active > a,.nav-pills > li.active > a:hover,.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7 +} + +.nav-stacked > li { + float: none +} + +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0 +} + +.nav-justified { + width: 100% +} + +.nav-justified > li { + float: none +} + +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px +} + +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto +} + +@media (min-width: 768px) { + .nav-justified > li { + display:table-cell; + width: 1% + } + + .nav-justified > li > a { + margin-bottom: 0 + } +} + +.nav-tabs-justified { + border-bottom: 0 +} + +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px +} + +.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd +} + +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom:1px solid #ddd; + border-radius: 4px 4px 0 0 + } + + .nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff + } +} + +.tab-content > .tab-pane { + display: none +} + +.tab-content > .active { + display: block +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent +} + +@media (min-width: 768px) { + .navbar { + border-radius:4px + } +} + +@media (min-width: 768px) { + .navbar-header { + float:left + } +} + +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.1); + box-shadow: inset 0 1px 0 rgba(255,255,255,0.1); + -webkit-overflow-scrolling: touch +} + +.navbar-collapse.in { + overflow-y: auto +} + +@media (min-width: 768px) { + .navbar-collapse { + width:auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none + } + + .navbar-collapse.collapse { + display: block!important; + height: auto!important; + padding-bottom: 0; + overflow: visible!important + } + + .navbar-collapse.in { + overflow-y: visible + } + + .navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0 + } +} + +.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse { + max-height: 340px +} + +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse { + max-height:200px + } +} + +.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px +} + +@media (min-width: 768px) { + .container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse { + margin-right:0; + margin-left: 0 + } +} + +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px +} + +@media (min-width: 768px) { + .navbar-static-top { + border-radius:0 + } +} + +.navbar-fixed-top,.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030 +} + +@media (min-width: 768px) { + .navbar-fixed-top,.navbar-fixed-bottom { + border-radius:0 + } +} + +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0 +} + +.navbar-brand { + float: left; + padding: 15px; + font-size: 18px; + line-height: 20px; + height: 50px +} + +.navbar-brand:hover,.navbar-brand:focus { + text-decoration: none +} + +.navbar-brand > img { + display: block +} + +@media (min-width: 768px) { + .navbar > .container .navbar-brand,.navbar > .container-fluid .navbar-brand { + margin-left:-15px + } +} + +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px +} + +.navbar-toggle:focus { + outline: 0 +} + +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px +} + +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px +} + +@media (min-width: 768px) { + .navbar-toggle { + display:none + } +} + +.navbar-nav { + margin: 7.5px -15px +} + +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px +} + +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position:static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none + } + + .navbar-nav .open .dropdown-menu > li > a,.navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px + } + + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px + } + + .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none + } +} + +@media (min-width: 768px) { + .navbar-nav { + float:left; + margin: 0 + } + + .navbar-nav > li { + float: left + } + + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px + } +} + +.navbar-form { + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1); + box-shadow: inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1); + margin: 8px -15px +} + +@media (min-width: 768px) { + .navbar-form .form-group { + display:inline-block; + margin-bottom: 0; + vertical-align: middle + } + + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle + } + + .navbar-form .form-control-static { + display: inline-block + } + + .navbar-form .input-group { + display: inline-table; + vertical-align: middle + } + + .navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control { + width: auto + } + + .navbar-form .input-group > .form-control { + width: 100% + } + + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle + } + + .navbar-form .radio,.navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle + } + + .navbar-form .radio label,.navbar-form .checkbox label { + padding-left: 0 + } + + .navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0 + } + + .navbar-form .has-feedback .form-control-feedback { + top: 0 + } +} + +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom:5px + } + + .navbar-form .form-group:last-child { + margin-bottom: 0 + } +} + +@media (min-width: 768px) { + .navbar-form { + width:auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px +} + +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px +} + +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px +} + +.navbar-text { + margin-top: 15px; + margin-bottom: 15px +} + +@media (min-width: 768px) { + .navbar-text { + float:left; + margin-left: 15px; + margin-right: 15px + } +} + +@media (min-width: 768px) { + .navbar-left { + float:left!important + } + + .navbar-right { + float: right!important; + margin-right: -15px + } + + .navbar-right ~ .navbar-right { + margin-right: 0 + } +} + +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7 +} + +.navbar-default .navbar-brand { + color: #777 +} + +.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent +} + +.navbar-default .navbar-text { + color: #777 +} + +.navbar-default .navbar-nav > li > a { + color: #777 +} + +.navbar-default .navbar-nav > li > a:hover,.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent +} + +.navbar-default .navbar-nav > .active > a,.navbar-default .navbar-nav > .active > a:hover,.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7 +} + +.navbar-default .navbar-nav > .disabled > a,.navbar-default .navbar-nav > .disabled > a:hover,.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent +} + +.navbar-default .navbar-toggle { + border-color: #ddd +} + +.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus { + background-color: #ddd +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #888 +} + +.navbar-default .navbar-collapse,.navbar-default .navbar-form { + border-color: #e7e7e7 +} + +.navbar-default .navbar-nav > .open > a,.navbar-default .navbar-nav > .open > a:hover,.navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #555 +} + +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color:#777 + } + + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent + } + + .navbar-default .navbar-nav .open .dropdown-menu > .active > a,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7 + } + + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent + } +} + +.navbar-default .navbar-link { + color: #777 +} + +.navbar-default .navbar-link:hover { + color: #333 +} + +.navbar-default .btn-link { + color: #777 +} + +.navbar-default .btn-link:hover,.navbar-default .btn-link:focus { + color: #333 +} + +.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc +} + +.navbar-inverse { + background-color: #222; + border-color: #080808 +} + +.navbar-inverse .navbar-brand { + color: #9d9d9d +} + +.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent +} + +.navbar-inverse .navbar-text { + color: #9d9d9d +} + +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d +} + +.navbar-inverse .navbar-nav > li > a:hover,.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent +} + +.navbar-inverse .navbar-nav > .active > a,.navbar-inverse .navbar-nav > .active > a:hover,.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808 +} + +.navbar-inverse .navbar-nav > .disabled > a,.navbar-inverse .navbar-nav > .disabled > a:hover,.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent +} + +.navbar-inverse .navbar-toggle { + border-color: #333 +} + +.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus { + background-color: #333 +} + +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff +} + +.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form { + border-color: #101010 +} + +.navbar-inverse .navbar-nav > .open > a,.navbar-inverse .navbar-nav > .open > a:hover,.navbar-inverse .navbar-nav > .open > a:focus { + background-color: #080808; + color: #fff +} + +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color:#080808 + } + + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808 + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808 + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent + } +} + +.navbar-inverse .navbar-link { + color: #9d9d9d +} + +.navbar-inverse .navbar-link:hover { + color: #fff +} + +.navbar-inverse .btn-link { + color: #9d9d9d +} + +.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus { + color: #fff +} + +.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444 +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + border-radius: 4px; + background: #fff!important +} + +.breadcrumb > li { + display: inline-block +} + +.breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #ccc +} + +.breadcrumb > .active { + color: #777 +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px +} + +.pagination > li { + display: inline +} + +.pagination > li > a,.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857143; + text-decoration: none; + color: #337ab7; + background-color: #fff; + border: 1px solid #ddd; + margin-left: -1px +} + +.pagination > li:first-child > a,.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px +} + +.pagination > li:last-child > a,.pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px +} + +.pagination > li > a:hover,.pagination > li > span:hover,.pagination > li > a:focus,.pagination > li > span:focus { + z-index: 3; + color: #23527c; + background-color: #eee; + border-color: #ddd +} + +.pagination > .active > a,.pagination > .active > span,.pagination > .active > a:hover,.pagination > .active > span:hover,.pagination > .active > a:focus,.pagination > .active > span:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; + cursor: default +} + +.pagination > .disabled > span,.pagination > .disabled > span:hover,.pagination > .disabled > span:focus,.pagination > .disabled > a,.pagination > .disabled > a:hover,.pagination > .disabled > a:focus { + color: #777; + background-color: #fff; + border-color: #ddd; + cursor: not-allowed +} + +.pagination-lg > li > a,.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333 +} + +.pagination-lg > li:first-child > a,.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px +} + +.pagination-lg > li:last-child > a,.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px +} + +.pagination-sm > li > a,.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5 +} + +.pagination-sm > li:first-child > a,.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px +} + +.pagination-sm > li:last-child > a,.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px +} + +.pager { + padding-left: 0; + margin: 20px 0; + list-style: none; + text-align: center +} + +.pager li { + display: inline +} + +.pager li > a,.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px +} + +.pager li > a:hover,.pager li > a:focus { + text-decoration: none; + background-color: #eee +} + +.pager .next > a,.pager .next > span { + float: right +} + +.pager .previous > a,.pager .previous > span { + float: left +} + +.pager .disabled > a,.pager .disabled > a:hover,.pager .disabled > a:focus,.pager .disabled > span { + color: #777; + background-color: #fff; + cursor: not-allowed +} + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em +} + +a.label:hover,a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer +} + +.label:empty { + display: none +} + +.btn .label { + position: relative; + top: -1px +} + +.label-default { + background-color: #777 +} + +.label-default[href]:hover,.label-default[href]:focus { + background-color: #5e5e5e +} + +.label-primary { + background-color: #337ab7 +} + +.label-primary[href]:hover,.label-primary[href]:focus { + background-color: #286090 +} + +.label-success { + background-color: #5cb85c +} + +.label-success[href]:hover,.label-success[href]:focus { + background-color: #449d44 +} + +.label-info { + background-color: #5bc0de +} + +.label-info[href]:hover,.label-info[href]:focus { + background-color: #31b0d5 +} + +.label-warning { + background-color: #f0ad4e +} + +.label-warning[href]:hover,.label-warning[href]:focus { + background-color: #ec971f +} + +.label-danger { + background-color: #d9534f +} + +.label-danger[href]:hover,.label-danger[href]:focus { + background-color: #c9302c +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: 700; + color: #fff; + line-height: 1; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: #777; + border-radius: 10px +} + +.badge:empty { + display: none +} + +.btn .badge { + position: relative; + top: -1px +} + +.btn-xs .badge,.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px +} + +a.badge:hover,a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer +} + +.list-group-item.active > .badge,.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff +} + +.list-group-item > .badge { + float: right +} + +.list-group-item > .badge + .badge { + margin-right: 5px +} + +.nav-pills > li > a > .badge { + margin-left: 3px +} + +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee +} + +.jumbotron h1,.jumbotron .h1 { + color: inherit +} + +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200 +} + +.jumbotron > hr { + border-top-color: #d5d5d5 +} + +.container .jumbotron,.container-fluid .jumbotron { + border-radius: 6px +} + +.jumbotron .container { + max-width: 100% +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding-top:48px; + padding-bottom: 48px + } + + .container .jumbotron,.container-fluid .jumbotron { + padding-left: 60px; + padding-right: 60px + } + + .jumbotron h1,.jumbotron .h1 { + font-size: 63px + } +} + +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out +} + +.thumbnail > img,.thumbnail a > img { + margin-left: auto; + margin-right: auto +} + +a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active { + border-color: #337ab7 +} + +.thumbnail .caption { + padding: 9px; + color: #333 +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px +} + +.alert h4 { + margin-top: 0; + color: inherit +} + +.alert .alert-link { + font-weight: 700 +} + +.alert > p,.alert > ul { + margin-bottom: 0 +} + +.alert > p + p { + margin-top: 5px +} + +.alert-dismissable,.alert-dismissible { + padding-right: 35px +} + +.alert-dismissable .close,.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit +} + +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #3c763d +} + +.alert-success hr { + border-top-color: #c9e2b3 +} + +.alert-success .alert-link { + color: #2b542c +} + +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #31708f +} + +.alert-info hr { + border-top-color: #a6e1ec +} + +.alert-info .alert-link { + color: #245269 +} + +.alert-warning { + background-color: #fcf8e3; + border-color: #faebcc; + color: #8a6d3b +} + +.alert-warning hr { + border-top-color: #f7e1b5 +} + +.alert-warning .alert-link { + color: #66512c +} + +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #a94442 +} + +.alert-danger hr { + border-top-color: #e4b9c0 +} + +.alert-danger .alert-link { + color: #843534 +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0 + } + + to { + background-position: 0 0 + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0 + } + + to { + background-position: 0 0 + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0 + } + + to { + background-position: 0 0 + } +} + +.progress { + overflow: hidden; + height: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.1) +} + +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease +} + +.progress-striped .progress-bar,.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); + background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); + background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px +} + +.progress.active .progress-bar,.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite +} + +.progress-bar-success { + background-color: #5cb85c +} + +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); + background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); + background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent) +} + +.progress-bar-info { + background-color: #5bc0de +} + +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); + background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); + background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent) +} + +.progress-bar-warning { + background-color: #f0ad4e +} + +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); + background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); + background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent) +} + +.progress-bar-danger { + background-color: #d9534f +} + +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); + background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); + background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent) +} + +.media { + margin-top: 15px +} + +.media:first-child { + margin-top: 0 +} + +.media,.media-body { + zoom:1;overflow: hidden +} + +.media-body { + width: 10000px +} + +.media-object { + display: block +} + +.media-object.img-thumbnail { + max-width: none +} + +.media-right,.media > .pull-right { + padding-left: 10px +} + +.media-left,.media > .pull-left { + padding-right: 10px +} + +.media-left,.media-right,.media-body { + display: table-cell; + vertical-align: top +} + +.media-middle { + vertical-align: middle +} + +.media-bottom { + vertical-align: bottom +} + +.media-heading { + margin-top: 0; + margin-bottom: 5px +} + +.media-list { + padding-left: 0; + list-style: none +} + +.list-group { + margin-bottom: 20px; + padding-left: 0 +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd +} + +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px +} + +a.list-group-item,button.list-group-item { + color: #555 +} + +a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading { + color: #333 +} + +a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus { + text-decoration: none; + color: #555; + background-color: #f5f5f5 +} + +button.list-group-item { + width: 100%; + text-align: left +} + +.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus { + background-color: #eee; + color: #777; + cursor: not-allowed +} + +.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading { + color: inherit +} + +.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text { + color: #777 +} + +.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7 +} + +.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading > small,.list-group-item.active:hover .list-group-item-heading > small,.list-group-item.active:focus .list-group-item-heading > small,.list-group-item.active .list-group-item-heading > .small,.list-group-item.active:hover .list-group-item-heading > .small,.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit +} + +.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text { + color: #c7ddef +} + +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8 +} + +a.list-group-item-success,button.list-group-item-success { + color: #3c763d +} + +a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading { + color: inherit +} + +a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6 +} + +a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d +} + +.list-group-item-info { + color: #31708f; + background-color: #d9edf7 +} + +a.list-group-item-info,button.list-group-item-info { + color: #31708f +} + +a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading { + color: inherit +} + +a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3 +} + +a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f +} + +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3 +} + +a.list-group-item-warning,button.list-group-item-warning { + color: #8a6d3b +} + +a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading { + color: inherit +} + +a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc +} + +a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b +} + +.list-group-item-danger { + color: #a94442; + background-color: #f2dede +} + +a.list-group-item-danger,button.list-group-item-danger { + color: #a94442 +} + +a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading { + color: inherit +} + +a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc +} + +a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442 +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3 +} + +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.05); + box-shadow: 0 1px 1px rgba(0,0,0,0.05) +} + +.panel-body { + padding: 15px +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px +} + +.panel-heading > .dropdown .dropdown-toggle { + color: inherit +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit +} + +.panel-title > a,.panel-title > small,.panel-title > .small,.panel-title > small > a,.panel-title > .small > a { + color: inherit +} + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px +} + +.panel > .list-group,.panel > .panel-collapse > .list-group { + margin-bottom: 0 +} + +.panel > .list-group .list-group-item,.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0 +} + +.panel > .list-group:first-child .list-group-item:first-child,.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px +} + +.panel > .list-group:last-child .list-group-item:last-child,.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px +} + +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0 +} + +.list-group + .panel-footer { + border-top-width: 0 +} + +.panel > .table,.panel > .table-responsive > .table,.panel > .panel-collapse > .table { + margin-bottom: 0 +} + +.panel > .table caption,.panel > .table-responsive > .table caption,.panel > .panel-collapse > .table caption { + padding-left: 15px; + padding-right: 15px +} + +.panel > .table:first-child,.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px +} + +.panel > .table:first-child > thead:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px +} + +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px +} + +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px +} + +.panel > .table:last-child,.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px +} + +.panel > .table:last-child > tbody:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px +} + +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px +} + +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px +} + +.panel > .panel-body + .table,.panel > .panel-body + .table-responsive,.panel > .table + .panel-body,.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd +} + +.panel > .table > tbody:first-child > tr:first-child th,.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0 +} + +.panel > .table-bordered,.panel > .table-responsive > .table-bordered { + border: 0 +} + +.panel > .table-bordered > thead > tr > th:first-child,.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,.panel > .table-bordered > tbody > tr > th:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,.panel > .table-bordered > tfoot > tr > th:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,.panel > .table-bordered > thead > tr > td:first-child,.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,.panel > .table-bordered > tbody > tr > td:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,.panel > .table-bordered > tfoot > tr > td:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0 +} + +.panel > .table-bordered > thead > tr > th:last-child,.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,.panel > .table-bordered > tbody > tr > th:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,.panel > .table-bordered > tfoot > tr > th:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,.panel > .table-bordered > thead > tr > td:last-child,.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,.panel > .table-bordered > tbody > tr > td:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,.panel > .table-bordered > tfoot > tr > td:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0 +} + +.panel > .table-bordered > thead > tr:first-child > td,.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,.panel > .table-bordered > tbody > tr:first-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,.panel > .table-bordered > thead > tr:first-child > th,.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,.panel > .table-bordered > tbody > tr:first-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0 +} + +.panel > .table-bordered > tbody > tr:last-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,.panel > .table-bordered > tfoot > tr:last-child > td,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,.panel > .table-bordered > tbody > tr:last-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,.panel > .table-bordered > tfoot > tr:last-child > th,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0 +} + +.panel > .table-responsive { + border: 0; + margin-bottom: 0 +} + +.panel-group { + margin-bottom: 20px +} + +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px +} + +.panel-group .panel + .panel { + margin-top: 5px +} + +.panel-group .panel-heading { + border-bottom: 0 +} + +.panel-group .panel-heading + .panel-collapse > .panel-body,.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd +} + +.panel-group .panel-footer { + border-top: 0 +} + +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd +} + +.panel-default { + border-color: #ddd +} + +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd +} + +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd +} + +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333 +} + +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd +} + +.panel-primary { + border-color: #337ab7 +} + +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7 +} + +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7 +} + +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff +} + +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7 +} + +.panel-success { + border-color: #d6e9c6 +} + +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6 +} + +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6 +} + +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d +} + +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6 +} + +.panel-info { + border-color: #bce8f1 +} + +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1 +} + +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1 +} + +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f +} + +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1 +} + +.panel-warning { + border-color: #faebcc +} + +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc +} + +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc +} + +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b +} + +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc +} + +.panel-danger { + border-color: #ebccd1 +} + +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1 +} + +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1 +} + +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442 +} + +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1 +} + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden +} + +.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0 +} + +.embed-responsive-16by9 { + padding-bottom: 56.25% +} + +.embed-responsive-4by3 { + padding-bottom: 75% +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.05) +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0,0,0,0.15) +} + +.well-lg { + padding: 24px; + border-radius: 6px +} + +.well-sm { + padding: 9px; + border-radius: 3px +} + +.close { + float: right; + font-size: 21px; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .2; + filter: alpha(opacity=20) +} + +.close:hover,.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .5; + filter: alpha(opacity=50) +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none +} + +.modal-open { + overflow: hidden +} + +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0 +} + +.modal.fade .modal-dialog { + -webkit-transform: translate(0,-25%); + -ms-transform: translate(0,-25%); + -o-transform: translate(0,-25%); + transform: translate(0,-25%); + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0,0); + -ms-transform: translate(0,0); + -o-transform: translate(0,0); + transform: translate(0,0) +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px +} + +.modal-content { + position: relative; + background-color: #fff; + border: 1px solid #999; + border: 1px solid rgba(0,0,0,0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0,0,0,0.5); + box-shadow: 0 3px 9px rgba(0,0,0,0.5); + -webkit-background-clip: padding-box; + background-clip: padding-box; + outline: 0 +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000 +} + +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0) +} + +.modal-backdrop.in { + opacity: .5; + filter: alpha(opacity=50) +} + +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857143px +} + +.modal-header .close { + margin-top: -2px +} + +.modal-title { + margin: 0; + line-height: 1.42857143 +} + +.modal-body { + position: relative; + padding: 15px +} + +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5 +} + +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0 +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0 +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll +} + +@media (min-width: 768px) { + .modal-dialog { + width:600px; + margin: 30px auto + } + + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.5); + box-shadow: 0 5px 15px rgba(0,0,0,0.5) + } + + .modal-sm { + width: 300px + } +} + +@media (min-width: 992px) { + .modal-lg { + width:900px + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-style: normal; + font-weight: 400; + letter-spacing: normal; + line-break: auto; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 12px; + opacity: 0; + filter: alpha(opacity=0) +} + +.tooltip.in { + opacity: .9; + filter: alpha(opacity=90) +} + +.tooltip.top { + margin-top: -3px; + padding: 5px 0 +} + +.tooltip.right { + margin-left: 3px; + padding: 0 5px +} + +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0 +} + +.tooltip.left { + margin-left: -3px; + padding: 0 5px +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000 +} + +.tooltip.top-left .tooltip-arrow { + bottom: 0; + right: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000 +} + +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000 +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000 +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000 +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000 +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000 +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000 +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-style: normal; + font-weight: 400; + letter-spacing: normal; + line-break: auto; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 14px; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0,0,0,0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.2); + box-shadow: 0 5px 10px rgba(0,0,0,0.2) +} + +.popover.top { + margin-top: -10px +} + +.popover.right { + margin-left: 10px +} + +.popover.bottom { + margin-top: 10px +} + +.popover.left { + margin-left: -10px +} + +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0 +} + +.popover-content { + padding: 9px 14px +} + +.popover > .arrow,.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid +} + +.popover > .arrow { + border-width: 11px +} + +.popover > .arrow:after { + border-width: 10px; + content: "" +} + +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999; + border-top-color: rgba(0,0,0,0.25); + bottom: -11px +} + +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #fff +} + +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999; + border-right-color: rgba(0,0,0,0.25) +} + +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #fff +} + +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0,0,0,0.25); + top: -11px +} + +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #fff +} + +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0,0,0,0.25) +} + +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #fff; + bottom: -10px +} + +.carousel { + position: relative +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100% +} + +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left +} + +.carousel-inner > .item > img,.carousel-inner > .item > a > img { + line-height: 1 +} + +.carousel-inner > .active,.carousel-inner > .next,.carousel-inner > .prev { + display: block +} + +.carousel-inner > .active { + left: 0 +} + +.carousel-inner > .next,.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100% +} + +.carousel-inner > .next { + left: 100% +} + +.carousel-inner > .prev { + left: -100% +} + +.carousel-inner > .next.left,.carousel-inner > .prev.right { + left: 0 +} + +.carousel-inner > .active.left { + left: -100% +} + +.carousel-inner > .active.right { + left: 100% +} + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: .5; + filter: alpha(opacity=50); + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0,0,0,0.6) +} + +.carousel-control.left { + background-image: -webkit-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%); + background-image: -o-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%); + background-image: -webkit-gradient(linear,left top,right top,color-stop(0,rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001))); + background-image: linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1) +} + +.carousel-control.right { + left: auto; + right: 0; + background-image: -webkit-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%); + background-image: -o-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%); + background-image: -webkit-gradient(linear,left top,right top,color-stop(0,rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5))); + background-image: linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1) +} + +.owl-pagination { + display: none +} + +.owl-controls .owl-buttons div { + width: 34px!important; + height: 50px!important; + background: #596065!important; + top: 50%!important; + margin: -25px 0 0!important; + opacity: 1!important; + border-radius: 0!important; + padding: 0!important; + position: absolute +} + +.owl-controls .owl-buttons div:hover { + background: #acafb2!important; + transition: .2s!important +} + +.owl-controls .owl-buttons .owl-prev { + border-top-right-radius: 4px!important; + border-bottom-right-radius: 4px!important; + left: -20px +} + +.owl-controls .owl-buttons .owl-next { + border-top-left-radius: 4px!important; + border-bottom-left-radius: 4px!important; + right: -20px +} + +.owl-controls .owl-buttons div:before { + position: absolute; + content: ''; + width: 8px; + height: 22px; + background: url(../images/arrows_blocks.png) no-repeat; + top: 50%; + margin-top: -11px; + left: 50%; + margin-left: -4px +} + +.owl-controls .owl-buttons .owl-prev:before { + background-position: 0 0 +} + +.owl-controls .owl-buttons .owl-next:before { + background-position: -8px 0 +} + +.carousel-control:hover,.carousel-control:focus { + outline: 0; + color: #fff; + text-decoration: none; + opacity: .9; + filter: alpha(opacity=90) +} + +.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block +} + +.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px +} + +.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px +} + +.carousel-control .icon-prev,.carousel-control .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif +} + +.carousel-control .icon-prev:before { + content: '\2039' +} + +.carousel-control .icon-next:before { + content: '\203a' +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #fff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0,0,0,0) +} + +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #fff +} + +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0,0,0,0.6) +} + +.carousel-caption .btn { + text-shadow: none +} + +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next { + width:30px; + height: 30px; + margin-top: -15px; + font-size: 30px + } + + .carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev { + margin-left: -15px + } + + .carousel-control .glyphicon-chevron-right,.carousel-control .icon-next { + margin-right: -15px + } + + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px + } + + .carousel-indicators { + bottom: 20px + } +} + +.clearfix:before,.clearfix:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical > .btn-group:before,.btn-group-vertical > .btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after { + content: " "; + display: table +} + +.clearfix:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical > .btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after { + clear: both +} + +.center-block { + display: block; + margin-left: auto; + margin-right: auto +} + +.pull-right { + float: right!important +} + +.pull-left { + float: left!important +} + +.hide { + display: none!important +} + +.show { + display: block!important +} + +.invisible { + visibility: hidden +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0 +} + +.hidden { + display: none!important +} + +.affix { + position: fixed +} + +.visible-xs,.visible-sm,.visible-md,.visible-lg { + display: none!important +} + +.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block { + display: none!important +} + +@media (max-width: 767px) { + .visible-xs { + display:block!important + } + + table.visible-xs { + display: table!important + } + + tr.visible-xs { + display: table-row!important + } + + th.visible-xs,td.visible-xs { + display: table-cell!important + } +} + +@media (max-width: 767px) { + .visible-xs-block { + display:block!important + } +} + +@media (max-width: 767px) { + .visible-xs-inline { + display:inline!important + } +} + +@media (max-width: 767px) { + .visible-xs-inline-block { + display:inline-block!important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display:block!important + } + + table.visible-sm { + display: table!important + } + + tr.visible-sm { + display: table-row!important + } + + th.visible-sm,td.visible-sm { + display: table-cell!important + } + + .visible-sm-block { + display: block!important + } + + .visible-sm-inline { + display: inline!important + } + + .visible-sm-inline-block { + display: inline-block!important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display:block!important + } + + table.visible-md { + display: table!important + } + + tr.visible-md { + display: table-row!important + } + + th.visible-md,td.visible-md { + display: table-cell!important + } + + .visible-md-block { + display: block!important + } + + .visible-md-inline { + display: inline!important + } + + .visible-md-inline-block { + display: inline-block!important + } +} + +@media (min-width: 1200px) { + .visible-lg { + display:block!important + } + + table.visible-lg { + display: table!important + } + + tr.visible-lg { + display: table-row!important + } + + th.visible-lg,td.visible-lg { + display: table-cell!important + } + + .visible-lg-block { + display: block!important + } + + .visible-lg-inline { + display: inline!important + } + + .visible-lg-inline-block { + display: inline-block!important + } +} + +@media (max-width: 767px) { + .hidden-xs { + display:none!important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display:none!important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display:none!important + } +} + +@media (min-width: 1200px) { + .hidden-lg { + display:none!important + } +} + +.visible-print { + display: none!important +} + +@media print { + .visible-print { + display: block!important + } + + table.visible-print { + display: table!important + } + + tr.visible-print { + display: table-row!important + } + + th.visible-print,td.visible-print { + display: table-cell!important + } +} + +.visible-print-block { + display: none!important +} + +@media print { + .visible-print-block { + display: block!important + } +} + +.visible-print-inline { + display: none!important +} + +@media print { + .visible-print-inline { + display: inline!important + } +} + +.visible-print-inline-block { + display: none!important +} + +@media print { + .visible-print-inline-block { + display: inline-block!important + } +} + +@media print { + .hidden-print { + display: none!important + } +} + +html { + color: #222; + font-size: 1em; + line-height: 1.4 +} + +::-moz-selection { + background: #b3d4fc; + text-shadow: none +} + +::selection { + background: #b3d4fc; + text-shadow: none +} + +hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ccc; + margin: 1em 0; + padding: 0 +} + +audio,canvas,iframe,img,svg,video { + vertical-align: middle +} + +fieldset { + border: 0; + margin: 0; + padding: 0 +} + +textarea { + resize: vertical +} + +.browserupgrade { + margin: .2em 0; + background: #ccc; + color: #000; + padding: .2em 0 +} + +.hidden { + display: none!important +} + +.visuallyhidden { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px +} + +.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto +} + +.invisible { + visibility: hidden +} + +.clearfix:before,.clearfix:after { + content: " "; + display: table +} + +.clearfix:after { + clear: both +} + +@media print { + *,:before,:after { + background: transparent!important; + color: #000!important; + box-shadow: none!important; + text-shadow: none!important + } + + a,a:visited { + text-decoration: underline + } + + a[href]:after { + content: " (" attr(href) ")" + } + + abbr[title]:after { + content: " (" attr(title) ")" + } + + a[href^="#"]:after,a[href^="javascript:"]:after { + content: "" + } + + pre,blockquote { + border: 1px solid #999; + page-break-inside: avoid + } + + thead { + display: table-header-group + } + + tr,img { + page-break-inside: avoid + } + + img { + max-width: 100%!important + } + + p,h2,h3 { + orphans: 3; + widows: 3 + } + + h2,h3 { + page-break-after: avoid + } +} + +body,html { + margin: 0; + padding: 0 +} + +body { + color: #333; + font: 15px/16px Roboto,sans-serif +} + +body,.background-body { + background: #edeeef +} + +a { + color: #0f6fc7 +} + +a.popup { + text-decoration: none; + border-bottom: 1px dashed #003569 +} + +.container { + min-width: 970px +} + +.row { + margin-right: -15px; + margin-left: -15px +} + +.padding-left-40 { + padding-left: 40px +} + +.padding-right-40 { + padding-right: 40px +} + +.padding-left-right-15 { + padding-left: 15px; + padding-right: 15px +} + +.pull-left { + float: left +} + +.pull-right { + float: right +} + +.margin-top-10 { + margin-top: 10px +} + +.margin-top-20 { + margin-top: 20px +} + +.margin-top-30 { + margin-top: 30px +} + +.margin-top-40 { + margin-top: 40px +} + +.margin-bottom-10 { + margin-bottom: 10px +} + +.margin-bottom-20 { + margin-bottom: 20px +} + +.margin-bottom-30 { + margin-bottom: 30px +} + +.margin-bottom-40 { + margin-bottom: 40px +} + +.margin-left-right-10 { + margin-left: 10px; + margin-right: 10px +} + +.block-3,.block-6 { + position: relative +} + +.block-15 { + float: left; + width: 15% +} + +.block-25 { + float: left; + width: 25% +} + +.block-33 { + float: left; + width: 33% +} + +.block-50 { + float: left; + width: 50% +} + +.block-60 { + float: left; + width: 60% +} + +.block-66 { + float: left; + width: 66% +} + +.block-75 { + float: left; + width: 75% +} + +.block-100 { + float: left; + width: 100% +} + +.input-group { + width: 100%; + position: relative; + display: table +} + +.input-group .form-control { + width: 100%; + margin-bottom: 0 +} + +.input-group-addon,.input-group-btn,.input-group .form-control { + display: table-cell +} + +.ul { + margin: 0; + padding: 0; + list-style: none +} + +.strong { + font-weight: 700 +} + +.btn { + display: inline-block; + padding: 4px 14px; + margin: 0; + margin-bottom: 0; + font-family: 'Roboto'; + font-size: 16px; + line-height: 20px; + color: #fff; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-color: #256caf; + background-image: -webkit-gradient(linear,0 0,0 100%,from(#2175c2),to(#2668a5)); + background-image: -webkit-linear-gradient(top,#2175c2,#2668a5); + background-image: -o-linear-gradient(top,#2175c2,#2668a5); + background-image: linear-gradient(to bottom,#2175c2,#2668a5); + background-image: -moz-linear-gradient(top,#2175c2,#2668a5); + background-repeat: repeat-x; + border: 0; + border-top: 1px solid #256caf; + border-bottom: 1px solid #256caf; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff2175c2',endColorstr='#ff2668a5',GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + text-decoration: none +} + +.btn:hover { + color: #fff +} + +.btn-large { + padding: 9px 29px; + font-size: 18px; + line-height: 28px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.img-responsive { + display: block; + height: auto; + max-width: 100% +} + +.content-title { + color: #333; + margin: 20px 0; + font-size: 18px; + font-weight: 700 +} + +.text-center { + text-align: center +} + +.clearfix { + clear: both +} + +#top-nav-wrapper { + float: left; + width: 100%; + background: #a7acb0; + position: fixed; + z-index: 2000; + height: 40px +} + +#top-nav { + height: 40px; + width: 100%; + float: left +} + +#top-nav .phones { + float: left; + padding: 0 40px +} + +#top-nav span.phone1,#top-nav span.phone2 { + display: inline-block; + font-size: 18px; + padding: 16px 10px 15px 17px +} + +#top-nav .top-menu { + padding-left: 0; + margin-bottom: 0 +} + +#top-nav .top-menu li { + position: relative; + display: inline-block +} + +#top-nav .top-menu li a { + font-size: 13px; + text-decoration: none; + text-transform: uppercase; + color: #fff; + padding: 0 13px; + line-height: 40px +} + +#top-nav .top-menu li a:hover { + text-decoration: underline +} + +#top-nav .top-menu li:first-child a { + background: none; + padding-left: 0 +} + +.cabinet_link_ { + line-height: 40px; + color: #fff; + float: right; + display: block; + width: 100%; + text-align: right; + padding-right: 15px; + border-left: 1px solid #959a9e; + border-right: 1px solid #959a9e +} + +.cabinet_link_ span { + position: relative +} + +.cabinet_link_ span:before { + content: ''; + position: absolute; + width: 14px; + height: 16px; + top: 50%; + margin-top: -8px; + left: -20px; + background: url(../images/new_img/ico/ico-4.png) no-repeat +} + +.cabinet_link_:hover { + color: #fff!important +} + +#top-nav ul.top-menu > li:hover > ul { + display: block +} + +#top-nav ul.top-menu > li > ul { + background: #fff; + max-width: 320px; + min-width: 120px; + display: none; + margin: 0; + padding: 0; + width: auto; + position: absolute; + top: 32px; + left: 0; + -webkit-border-radius: 0 0 10px 10px; + border-radius: 0 0 10px 10px; + -webkit-box-shadow: 4px 5px 1px 5px rgba(0,0,0,0.2); + box-shadow: 4px 5px 1px 5px rgba(0,0,0,0.2) +} + +#top-nav ul.top-menu > li > ul > li { + float: left; + width: 100% +} + +#top-nav ul.top-menu > li > ul > li > a { + float: left; + width: 100%; + padding: 5px 10px; + font-size: 14px; + line-height: 18px; + text-transform: none +} + +#top-nav ul.top-menu > li > ul > li > a:hover { + color: red +} + +header { + height: 120px; + position: relative; + width: 100%; + float: left; + background: #fff; + padding: 0; + margin-top: 40px +} + +header a#logo { + float: left; + padding-right: 10px +} + +header a#logo img { + width: 100% +} + +#brand_bar { + float: left; + width: 100%; + background: #fff +} + +#brand_bar ul { + padding: 0; + margin: 0 auto; + display: table +} + +#brand_bar ul li { + display: table-cell; + padding: 0 8px +} + +#top-cart { + max-width: 196px; + position: absolute; + right: 0; + top: 0; + padding: 0 +} + +.btn-cart { + width: 100%; + background: url(/images/btn_cart_angle.png) 100% 0 #489b6b no-repeat; + border: none; + font: 13px/13px Verdana; + text-transform: uppercase; + text-decoration: none; + color: #fff; + padding: 17px 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0 +} + +p.empty-cart { + width: 100%; + padding: 50px 0; + text-align: center +} + +#top-cart .btn.btn-cart.not_empty i { + position: absolute; + right: 10px; + top: 2px; + width: 46px; + height: 42px; + background: url(/images/cart-icon.png) 0 0 transparent no-repeat +} + +.ordering_tbl { + float: left; + width: 100%; + margin: 40px 0 +} + +.catalogueLeft.orderLeftPanel .columnLeftInfo .prodview { + background: transparent; + margin: 40px 0 +} + +#tbl_cart { + width: 100%; + margin: 0 0 40px +} + +#tbl_cart td.order_img { + text-align: center; + width: 160px +} + +#tbl_cart .iTitle { + padding: 20px 0 0 +} + +#tbl_cart .iTitle a { + color: #337ab7; + font-weight: 700; + text-decoration: underline +} + +.eraseCartBtnCell .btn { + background: #fff!important; + border: 1px solid #dadada; + color: #999 +} + +.order_item { + background: #fff; + padding: 20px; + margin: 0 0 40px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +table.tbl_cart .totalPrice { + font-size: 20px; + color: #000; + color: #236fb4 +} + +table.tbl_cart .totalPrice label#total { + font-style: italic +} + +table.tbl_cart table.order_details { + float: right +} + +table.tbl_cart table.order_details .del_order { + color: #999; + float: right; + margin-bottom: 20px +} + +table.tbl_cart table.order_details .del_order span { + padding: 0 4px 0 3px; + border: 1px solid #999; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +table.tbl_cart table.order_details .del_order:hover { + color: red +} + +table.tbl_cart table.order_details .del_order:hover span { + border: 1px solid red; + text-decoration: none +} + +table.tbl_cart table.order_details .iPriceOne,table.tbl_cart table.order_details .iPrice { + font-style: italic +} + +table.tbl_cart table.order_details td:nth-child(2n+1) { + padding-right: 20px +} + +table.tbl_cart table.order_details td { + text-align: right +} + +table.tbl_cart table.order_details .count_choise { + float: right +} + +table.tbl_cart table.order_details .count_choise input { + height: 30px; + -webkit-border-top-right-radius: 0; + -webkit-border-bottom-left-radius: 0; + -moz-border-radius-topright: 0; + -moz-border-radius-bottomleft: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 0 +} + +table.tbl_cart table.order_details .count_choise .plus,table.tbl_cart table.order_details .count_choise .minus,table.tbl_cart table.order_details .count_choise .minus-disabled { + margin: 10px 7px 8px 0 +} + +#myForm .modal-dialog.buy-product { + width: 600px +} + +#myForm .modal-dialog.buy-product .h3 { + font-size: 17px; + color: #235b94 +} + +#header_search { + float: left; + max-width: 400px; + margin-top: 21px +} + +.popular_search_title { + padding: 0 10px 0 50px +} + +#header_search p { + font-size: 13px; + margin: 0 0 5px +} + +#header_search .input-group-loop { + height: 42px; + width: 42px; + display: table-cell; + background: url(/images/search_loop.png) 0 0 #f5f5f5 no-repeat +} + +#header_search input[type=text] { + float: left; + height: 42px; + background: #f5f5f5; + display: table-cell; + width: 100%; + border: 1px solid #d9d9d9; + font-size: 13px; + line-height: 40px; + padding: 0 5px 0 10px +} + +.input-group-btn { + display: table-cell +} + +#header_search input[type=submit] { + float: left; + border: none; + width: 100%; + height: 42px; + background: #1d60a3; + color: #fff; + text-transform: uppercase; + position: relative; + line-height: 30px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: inset 0 0 3px 3px rgba(117,158,199,1); + -moz-box-shadow: inset 0 0 3px 3px rgba(117,158,199,1); + box-shadow: inset 0 0 3px 3px rgba(117,158,199,1); + min-width: 80px +} + +.search_btn_angle { + width: 6px; + height: 6px; + position: absolute; + top: 0; + right: -1px; + background: url(/images/search_btn_angle.png) no-repeat +} + +#header_feedback { + float: left; + padding: 21px 0 5px 30px +} + +#header_feedback form { + background: #fcd103; + padding-left: 10px +} + +#header_feedback form input { + display: none; + width: 115px; + border: none +} + +#header_feedback form input:focus,#header_feedback form button:focus { + outline: 0 +} + +#header_feedback form button { + font-size: 14px; + background: #fcd103; + position: relative; + border: none; + color: #000; + line-height: 30px; + padding: 6px 14px +} + +#header_feedback .feedback_btn_angle { + width: 6px; + height: 6px; + position: absolute; + top: 0; + right: 0; + background: url(/images/search_btn_angle.png) no-repeat +} + +#mainmenu { + float: left; + width: 100%; + background: #0f6fc7 +} + +#mainmenu .container { + position: relative +} + +#menu-bar { + width: 100%; + margin: 0; + padding: 0; + height: 48px; + line-height: 100%; + position: relative; + z-index: 999 +} + +#menu-bar li { + margin: 0; + padding: 0; + float: left; + list-style: none; + height: 48px +} + +#menu-bar a { + font-family: 'Roboto',sans-serif; + font-style: normal; + font-size: 15px; + color: #fff; + text-decoration: none; + display: block; + padding: 0 20px; + margin: 0; + text-transform: uppercase; + line-height: 48px +} + +.no-padding-left { + padding-left: 0!important +} + +.no-padding-right { + padding-right: 0!important +} + +#menu-bar li { + border-right: 1px solid #075fb0 +} + +#menu-bar li:first-child { + border-left: 1px solid #075fb0 +} + +#menu-bar li:hover,.new_catalog.show { + background: #075fb0 +} + +.new_cat_link,.sale_catalog { + position: relative +} + +.new_cat_link:before { + content: ''; + position: absolute; + width: 9px; + height: 5px; + background: url(../images/new_img/ico/ico-1.png) no-repeat; + top: 50%; + margin-top: -2px; + right: 6px; + transform: rotate(180deg); + -webkit-transform: rotate(180deg) +} + +.sale_catalog .new_cat_link:before { + right: 0 +} + +.sale_catalog.show-sale .new_cat_link:before { + transform: rotate(0deg); + -webkit-transform: rotate(0deg) +} + +.sale_catalog { + position: relative; + z-index: 99992 +} + +.sale_catalog div { + display: none; + position: absolute; + left: 0; + top: 29px; + background: #fff; + width: 120px; + box-shadow: 0 0 12px 0 rgba(0,0,0,0.35); + padding: 5px 10px; + z-index: 99991 +} + +.sale-overlay { + position: fixed; + width: 100%; + height: 100%; + background: #fff; + z-index: 1 +} + +.sale_catalog:hover div { + display: block +} + +.sale_catalog div ul { + list-style: none; + width: 100%; + float: left; + padding: 0!important +} + +.sale_catalog div ul li { + float: left; + width: 100% +} + +.sale_catalog div ul li a { + text-decoration: none!important; + text-transform: none!important; + color: #0f6fc7!important; + padding: 0!important; + line-height: 26px!important +} + +.sale_catalog:hover a { + text-decoration: none!important +} + +.sale_catalog div ul li a:hover { + text-decoration: underline!important +} + +.hide-cat-menu { + display: none; + position: absolute; + width: 100%; + top: 48px; + left: 0; + background: #fff; + box-shadow: 0 0 7px 0 rgba(0,0,0,0.35) +} + +.new_catalog.show a:before,.sale_catalog:hover a:before { + transform: rotate(0deg); + -webkit-transform: rotate(0deg) +} + +.new_catalog.show .hide-cat-menu { + display: block +} + +.main-cat_ { + padding-bottom: 40px +} + +.main-cat_ ul { + padding-left: 0 +} + +.main-cat_ ul li { + width: 100%; + float: left; + border-left: 0!important; + border-right: 0!important; + height: 40px; + border-bottom: 1px solid #edeeef +} + +.main-cat_ ul li a { + color: #4b4b4b!important; + padding-right: 0!important; + position: relative +} + +.main-cat_ ul li a:before { + width: 5px; + height: 9px; + content: ''; + background: url(../images/new_img/ico/ico-2.png) no-repeat; + position: absolute; + top: 50%; + margin-top: -4px; + right: 20px; + transform: rotate(0deg); + -webkit-transform: rotate(0deg)!important +} + +.main-cat_ ul li.act a:before { + background: url(../images/new_img/ico/ico-3.png) no-repeat +} + +.main-cat_ ul li.act a { + color: #fff!important +} + +.hide-cat-menu li:hover { + background: #fff!important +} + +.hide-cat-menu li.act { + background: #a7acb0!important +} + +.hide-cat-sub { + position: relative; + background: #edeeef; + height: 100% +} + +.hide-cat-sub ul { + display: none; + padding-left: 0!important +} + +.hide-cat-sub ul.active-show { + display: block +} + +.hide-cat-menu table td { + vertical-align: top +} + +.sub-cat_ ul li { + border: 0!important; + height: 180px!important; + position: relative; + margin-top: 20px!important +} + +.sub-cat_ ul li table { + width: 100%; + height: 110px; + text-align: center +} + +.sub-cat_ ul li table td { + vertical-align: middle +} + +.sub-cat_ ul li table img { + max-width: 100px; + max-height: 110px; + vertical-align: middle +} + +.sub-cat_ ul li a { + display: block; + width: 100%; + height: 100%; + text-decoration: none; + position: relative; + padding: 0 15px!important; + float: left +} + +.sub-cat_ ul li:hover a div { + width: 100%; + float: left; + position: relative; + width: 100%; + height: 100%; + box-shadow: 0 0 7px 0 rgba(0,0,0,0.35); + height: auto; + min-height: 170px; + top: 0; + left: 0; + background: #fff; + padding-bottom: 10px!important; + z-index: 99999 +} + +.sub-cat_ ul li:hover { + background: none!important +} + +.sub-cat_ ul li span { + display: block; + color: #0f6fc7; + font-size: 14px; + line-height: normal; + text-align: center; + height: 34px; + overflow: hidden; + margin-top: 10px +} + +.sub-cat_ ul li a:hover span { + text-decoration: underline!important; + height: auto +} + +.wrapper { + float: left; + width: 100%; + background: transparent +} + +.wrapper.white { + background: #fff +} + +#bigSlider,#catSlider { + float: left; + width: 100%; + position: relative; + background: #fff; + border-bottom: 3px solid #b3b3b3; + overflow: hidden +} + +#catSlider { + border-bottom: none +} + +#bigSlider .carousel,#catSlider .carousel { + margin: 0 auto; + max-width: 1400px; + min-width: 1000px +} + +#bigSlider .carousel-indicators { + background: #fff; + border: 3px solid #595756; + padding: 6px 28px; + width: auto; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +#bigSlider .carousel-indicators li { + width: 10px; + height: 10px; + border: 1px solid #595756; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0 +} + +#bigSlider .carousel-indicators li.active { + width: 10px; + height: 10px; + border: 1px solid #15599b; + background: #15599b; + margin: 1px +} + +.carousel { + position: relative +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; + text-align: center +} + +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left +} + +.carousel-inner > .item > img,.carousel-inner > .item > a > img { + line-height: 1 +} + +@media all and (transform-3d),(-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px + } + + .carousel-inner > .item.next,.carousel-inner > .item.active.right { + -webkit-transform: translate3d(100%,0,0); + transform: translate3d(100%,0,0); + left: 0 + } + + .carousel-inner > .item.prev,.carousel-inner > .item.active.left { + -webkit-transform: translate3d(-100%,0,0); + transform: translate3d(-100%,0,0); + left: 0 + } + + .carousel-inner > .item.next.left,.carousel-inner > .item.prev.right,.carousel-inner > .item.active { + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + left: 0 + } +} + +.carousel-inner > .active,.carousel-inner > .next,.carousel-inner > .prev { + display: block +} + +.carousel-inner > .active { + left: 0 +} + +.carousel-inner > .next,.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100% +} + +.carousel-inner > .next { + left: 100% +} + +.carousel-inner > .prev { + left: -100% +} + +.carousel-inner > .next.left,.carousel-inner > .prev.right { + left: 0 +} + +.carousel-inner > .active.left { + left: -100% +} + +.carousel-inner > .active.right { + left: 100% +} + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 10%; + opacity: 1; + filter: alpha(opacity=50); + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0,0,0,0.6) +} + +.carousel-control.leftOrig { + background: -moz-linear-gradient(left,rgba(255,255,255,1) 0%,rgba(255,255,255,1) 50%,rgba(255,255,255,0.78) 78%,rgba(255,255,255,0) 100%); + background: -webkit-gradient(linear,left top,right top,color-stop(0%,rgba(255,255,255,1)),color-stop(50%,rgba(255,255,255,1)),color-stop(78%,rgba(255,255,255,0.78)),color-stop(100%,rgba(255,255,255,0))); + background: -webkit-linear-gradient(left,rgba(255,255,255,1) 0%,rgba(255,255,255,1) 50%,rgba(255,255,255,0.78) 78%,rgba(255,255,255,0) 100%); + background: -o-linear-gradient(left,rgba(255,255,255,1) 0%,rgba(255,255,255,1) 50%,rgba(255,255,255,0.78) 78%,rgba(255,255,255,0) 100%); + background: -ms-linear-gradient(left,rgba(255,255,255,1) 0%,rgba(255,255,255,1) 50%,rgba(255,255,255,0.78) 78%,rgba(255,255,255,0) 100%); + background: linear-gradient(to right,rgba(255,255,255,1) 0%,rgba(255,255,255,1) 50%,rgba(255,255,255,0.78) 78%,rgba(255,255,255,0) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#00ffffff',GradientType=1) +} + +.carousel-control.left { + background: -moz-linear-gradient(left,rgba(255,255,255,0.95) 0%,rgba(255,255,255,0.8) 50%,rgba(255,255,255,0.78) 78%,rgba(255,255,255,0) 100%); + background: -webkit-gradient(linear,left top,right top,color-stop(0%,rgba(255,255,255,0.95)),color-stop(50%,rgba(255,255,255,0.8)),color-stop(78%,rgba(255,255,255,0.78)),color-stop(100%,rgba(255,255,255,0))); + background: -webkit-linear-gradient(left,rgba(255,255,255,0.95) 0%,rgba(255,255,255,0.8) 50%,rgba(255,255,255,0.75) 78%,rgba(255,255,255,0) 100%); + background: -o-linear-gradient(left,rgba(255,255,255,0.95) 0%,rgba(255,255,255,0.8) 50%,rgba(255,255,255,0.75) 78%,rgba(255,255,255,0) 100%); + background: -ms-linear-gradient(left,rgba(255,255,255,0.95) 0%,rgba(255,255,255,0.8) 50%,rgba(255,255,255,0.75) 78%,rgba(255,255,255,0) 100%); + background: linear-gradient(to right,rgba(255,255,255,0.95) 0%,rgba(255,255,255,0.8) 50%,rgba(255,255,255,0.75) 78%,rgba(255,255,255,0) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#00ffffff',GradientType=1) +} + +.carousel-control.right { + left: auto; + right: 0; + background: -moz-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,0.78) 22%,rgba(255,255,255,1) 50%,rgba(255,255,255,1) 100%); + background: -webkit-gradient(linear,left top,right top,color-stop(0%,rgba(255,255,255,0)),color-stop(22%,rgba(255,255,255,0.78)),color-stop(50%,rgba(255,255,255,1)),color-stop(100%,rgba(255,255,255,1))); + background: -webkit-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,0.78) 22%,rgba(255,255,255,1) 50%,rgba(255,255,255,1) 100%); + background: -o-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,0.78) 22%,rgba(255,255,255,1) 50%,rgba(255,255,255,1) 100%); + background: -ms-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,0.78) 22%,rgba(255,255,255,1) 50%,rgba(255,255,255,1) 100%); + background: linear-gradient(to right,rgba(255,255,255,0) 0%,rgba(255,255,255,0.78) 22%,rgba(255,255,255,1) 50%,rgba(255,255,255,1) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffffff',endColorstr='#ffffff',GradientType=1) +} + +.carousel-control:hover,.carousel-control:focus { + outline: 0; + color: #fff; + text-decoration: none; + filter: alpha(opacity=90) +} + +.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block +} + +.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px +} + +.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px +} + +.carousel-control .icon-prev,.carousel-control .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif +} + +.carousel-control .icon-prev:before { + content: '\2039' +} + +.carousel-control .icon-next:before { + content: '\203a' +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center +} + +#myCarousel2 .carousel-indicators { + left: 60% +} + +#myCarousel3 .carousel-indicators { + left: 80% +} + +#myCarousel4 .carousel-indicators { + left: 80% +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #fff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0,0,0,0) +} + +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #fff +} + +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0,0,0,0.6) +} + +.carousel-caption .btn { + text-shadow: none +} + +.img-nav { + background: #fff; + border: 2px solid #d9d9d9; + padding: 3px; + position: absolute; + top: 40%; + width: 150px; + height: auto; + display: inline-block; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +#catSlider .carousel .img-nav { + width: 90px +} + +.img-nav.img-prev { + left: -110px +} + +#catSlider .carousel .img-nav.img-prev { + left: -60px +} + +.img-nav.img-next { + right: -110px +} + +#catSlider .carousel .img-nav.img-next { + right: -60px +} + +.carousel-control-nav { + position: absolute; + top: 45%; + width: 25px; + height: 43px; + background: url(/images/slider_nav.png) 0 0 no-repeat +} + +.carousel-control-nav.right { + background: url(/images/slider_nav.png) -25px 0 no-repeat +} + +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next { + width:30px; + height: 30px; + margin-top: -15px; + font-size: 30px + } + + .carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev { + margin-left: -15px + } + + .carousel-control .glyphicon-chevron-right,.carousel-control .icon-next { + margin-right: -15px + } + + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px + } + + .carousel-indicators { + bottom: 20px + } +} + +#catSlider .cat-slide-part { + position: relative; + float: left; + width: 100%; + border: 5px solid #fff +} + +#catSlider .cat-slide-part .cat-slide-part-price { + position: absolute; + right: 50px; + top: 50px; + padding: 10px; + background: rgba(255,255,255,0.5); + color: #000; + font-size: 38px; + font-style: italic; + font-weight: 600 +} + +#catSlider .cat-slide-part .cat-slide-part-price small { + font-size: 20px +} + +.bigSlidertabs { + width: 100%; + position: absolute; + bottom: 0; + z-index: 9; + -webkit-transition: all 1s ease; + -moz-transition: all 1s ease; + -o-transition: all 1s ease; + -ms-transition: all 1s ease; + transition: all 1s ease +} + +.bigSlidertabs.fixed { + bottom: -50px +} + +.bigSlidertabs.fixed:hover { + bottom: 0 +} + +.bigSlidertabs a { + color: #939393 +} + +.bigSlidertabs a p a { + color: #0044b5; + font-weight: 700 +} + +.bigSlidertabs .tab1,.bigSlidertabs .tab2,.bigSlidertabs .tab3,.bigSlidertabs .tab4 { + background: #fff; + color: #acacac; + text-align: center; + cursor: pointer +} + +.bigSlidertabs .tab1 { + float: left; + height: 109px; + width: 204px +} + +.bigSlidertabs .tab1 .tab_bg_1 { + width: 100%; + height: 53px; + background: url(/images/tab1_bg.png) 50% 0 no-repeat +} + +.bigSlidertabs .tab2 { + float: left; + height: 109px; + width: 204px +} + +.bigSlidertabs .tab2 .tab_bg_2 { + width: 100%; + height: 53px; + background: url(/images/tab2_bg.png) 50% 0 no-repeat +} + +.bigSlidertabs .tab3 { + float: right; + height: 109px; + width: 350px; + padding-left: 20px +} + +.bigSlidertabs .tab3 .tab_bg_3 { + width: 100%; + height: 53px; + background: url(/images/tab3_bg.png) 50% 0 no-repeat +} + +.bigSlidertabs .tab4 { + float: right; + height: 109px; + width: 300px +} + +.bigSlidertabs .tab4 .tab_bg_4 { + width: 100%; + height: 53px; + background: url(/images/tab4_bg.png) 50% 0 no-repeat +} + +table.infographic { + width: 100%; + padding: 0; + margin: 40px 0 0; + border-collapse: collapse; + border-spacing: 0 +} + +table.infographic td { + padding: 0 0 0 35px +} + +table.infographic .number_title { + font: bold 24px/24px roboto,sans-serif; + color: #0c559d +} + +table.infographic .icon_block { + position: relative; + z-index: 1; + height: 50px; + padding: 0 10px 0 50px +} + +table.infographic .icon_block .title { + font-weight: 700; + color: #444; + font-size: 15px; + font-family: 'roboto',sans-serif; + padding-top: 9px +} + +table.infographic .icon_block .title a { + font-weight: 700; + color: #333 +} + +table.infographic .number_descr { + font-size: 13px; + color: #333 +} + +table.infographic .icon_block { + position: relative; + z-index: 1; + height: 50px; + padding: 0 10px 0 50px +} + +table.infographic .icon_block .icon { + position: absolute; + z-index: 1; + left: 0; + top: 50%; + background-image: url(/images/sprites/index_bottom_info_icons.png); + background-repeat: no-repeat; + width: 30px; + height: 31px; + background-position: 0 -31px; + margin-top: -15px +} + +table.infographic .icon_block .warranty { + width: 30px; + height: 31px; + background-position: 0 0; + margin-top: -15px +} + +table.infographic .icon_block .discount { + width: 26px; + height: 26px; + background-position: 0 -63px; + margin-top: -13px +} + +table.infographic .icon_block .support { + width: 32px; + height: 32px; + background-position: 0 -90px; + margin-top: -16px +} + +.detail_recently_looked .carousel,.detail_recently_looked .jcarousel-container { + height: 415px +} + +.detail_recently_looked ul li { + height: 132px +} + +.detail_recently_looked ul li .img,.detail_recommended_block ul li .img { + width: 168px; + height: 100px; + text-align: center; + border-right: 1px dotted #b8b8b8; + margin: 0 15px 20px 0; + float: left +} + +.detail_recently_looked ul li .img { + width: 45%; + height: 100px +} + +.detail_recommended_block { + overflow: hidden; + background-color: #fff; + padding: 20px; + height: 335px; + border-radius: 5px +} + +.detail_recently_looked ul li .img img { + padding: 10px; + border-radius: 10px; + background-color: #fff +} + +.detail_recently_looked ul li .info { + margin-bottom: 0 +} + +.detail_recently_looked ul li .info,.detail_recommended_block ul li .info { + overflow: hidden; + margin: 0 0 5px +} + +.detail_recently_looked ul li .title { + min-height: 35px; + max-height: 65px; + overflow: hidden +} + +.detail_recently_looked ul li .title,.detail_recommended_block ul li .title { + font-size: 13px; + min-height: 45px; + padding: 5px 10px 0 0 +} + +.detail_recently_looked ul li .title a { + font-size: 13px +} + +.detail_recently_looked ul li .price,.detail_recommended_block ul li .price,nav .main_menu .popup_menu .top_product_month .top_product_month_block .price { + font-size: 16px; + font-weight: 700; + font-style: italic; + line-height: 20px; + color: #333; + font-family: Arial +} + +.detail_recently_looked ul li .price .currency,.detail_recommended_block ul li .price .currency,nav .main_menu .popup_menu .top_product_month .top_product_month_block .price .currency { + font-weight: 400; + font-style: italic; + padding-left: 5px +} + +.detail_recommended_block ul li .rating ul li,.product_detail .popular_carousel li .rating ul li,.detail_recently_looked ul li .rating ul li,.product_detail .hit .rating ul li,.product_detail .info .info_table .rating li,.product_detail .comments_list_carousel li .comment_block .rating ul li,.detail_main_tabs li.comments .rating li,.tip_comment_other_model .rating li,.catalog_product_list .rating ul li,.category_popular_list .catalog_item .rating ul li,.fresh_block .comment_block .rating ul li,.catalog_product_list .fast_view .main_info_part .rating ul li,.old_product_block .product .rating ul li,#compare .rating ul li { + float: left!important; + width: 10px; + height: 9px; + padding: 1px; + background: url(/images/sprites/icons.png) -13px -105px no-repeat; + background-repeat: no-repeat; + position: static; + border-radius: 0; + margin: 0 +} + +.detail_recommended_block ul li .rating ul li.active,.product_detail .popular_carousel li .rating ul li.active,.detail_recently_looked ul li .rating ul li.active,.product_detail .hit .rating ul li.active,.product_detail .comments_list_carousel li .comment_block .rating ul li.active,.detail_main_tabs li.comments .rating li.active,.tip_comment_other_model .rating li.active,.catalog_product_list .rating ul li.active,.category_popular_list .catalog_item .rating ul li.active,.fresh_block .comment_block .rating ul li.active,.catalog_product_list .fast_view .main_info_part .rating ul li.active { + background-position: -12px -93px +} + +.detail_recently_looked ul li .rating ul li.passive,.product_detail .info .info_table .rating li,.product_detail .comments_list_carousel li .comment_block .rating ul li,.detail_main_tabs li.comments .rating li.passive,.fresh_block .comment_block .rating ul li.passive,.catalog_product_list .fast_view .main_info_part .rating ul li.passive,.catalog_product_list .fast_view .tabs_part .comments .rating li.passive,.old_product_block .product .rating ul li.passive { + background: url(/images/sprites/icons_opacity.png) -28px -386px no-repeat +} + +.detail_recommended_block ul li table,.detail_recommended_block ul li table td { + width: 100%; + height: 100%; + border-collapse: collapse; + padding: 0; + margin: 0; + border-spacing: 0; + width: 100%; + height: 100%; + border-collapse: collapse; + padding: 0; + margin: 0; + border-spacing: 0 +} + +.detail_recommended_block ul li table td { + width: 50%; + vertical-align: top; + border-right: 1px dotted #b8b8b8 +} + +.detail_recommended_block ul li table td.even { + border: 0 +} + +.detail_recommended_block ul li .buy_button { + margin-top: -5px +} + +.detail_recommended_block ul li .img { + border: none +} + +.btn-buy { + display: inline-block; + padding: 4px 14px; + margin: 0; + margin-bottom: 0; + font-family: 'Roboto'; + font-size: 16px; + line-height: 20px; + color: #fff; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-color: #256caf; + background-image: -webkit-gradient(linear,0 0,0 100%,from(#2175c2),to(#2668a5)); + background-image: -webkit-linear-gradient(top,#2175c2,#2668a5); + background-image: -o-linear-gradient(top,#2175c2,#2668a5); + background-image: linear-gradient(to bottom,#2175c2,#2668a5); + background-image: -moz-linear-gradient(top,#2175c2,#2668a5); + background-repeat: repeat-x; + border: 0; + border-top: 1px solid #256caf; + border-bottom: 1px solid #256caf; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff2175c2',endColorstr='#ff2668a5',GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + text-decoration: none +} + +.detail_search .input_part { + position: relative; + background-image: none; + z-index: 1; + margin: 0 0 20px +} + +.detail_search .submit { + float: right; + width: 73px; + height: 24px; + overflow: hidden +} + +.detail_search .submit input { + width: 100%; + cursor: pointer; + height: 24px; + padding: 0 +} + +.detail_search .submit input.btn-yellow { + line-height: 26px; + color: #fff; + text-shadow: 0 1px 0 #e67103; + background-color: #fe9d20; + background-image: -webkit-gradient(linear,0 0,0 100%,from(#fecc2e),to(#fe9d20)); + background-image: -webkit-linear-gradient(top,#fecc2e,#fe9d20); + background-image: -o-linear-gradient(top,#fecc2e,#fe9d20); + background-image: linear-gradient(to bottom,#fecc2e,#fe9d20); + background-image: -moz-linear-gradient(top,#fecc2e,#fe9d20); + border: 0; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fffecc2e',endColorstr='#fffe9d20',GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + -webkit-border-top-right-radius: 5px; + -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-topright: 5px; + -moz-border-radius-bottomright: 5px; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px +} + +.detail_search { + padding: 0 +} + +.detail_search .input_part { + height: 24px; + overflow: hidden; + background: #fff; + padding: 0 0 0 38px; + position: relative; + z-index: 1; + border-radius: 3px 0 0 3px +} + +.detail_search .input_part .input input { + background-color: #fff; + color: #333; + border: 0; + width: 100%; + height: 18px; + line-height: 18px; + padding: 3px 0; + outline: 0; + box-sizing: content-box +} + +.detail_search .input_part .icon { + position: absolute; + z-index: 1; + width: 13px; + height: 14px; + background: url(/images/sprites/icons.png) -18px -565px no-repeat; + left: 6px; + top: 5px +} + +.content { + background: #fff; + padding: 20px 14px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px +} + +.content-mp h1,.content-mp h2,.content-mp h3,.content-mp h4,.content-mp h5,.content-mp h6 { + padding: 0 43px +} + +table.articles-list td { + padding: 0 40px +} + +table.articles-list td a { + font-size: 15px; + color: #006cb7 +} + +ul.parameters-list { + background: #fff; + padding: 10px 40px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px +} + +ul.parameters-list li { + display: inline-block; + background: url(/images/parameters-list-marker.png) 0 50% no-repeat; + padding: 0 20px +} + +ul.parameters-list li a { + font-size: 16px; + color: #000; + text-decoration: none +} + +.fb-wrapper_ { + width: 100%; + float: left; + background: #fff; + padding-bottom: 80px +} + +.facebook_container { + background: #fff +} + +._h7l { + background: transparent!important; + border: 1px solid transparent!important +} + +footer { + float: left; + width: 100%; + margin-bottom: -40px +} + +footer .content-title { + display: block; + font-size: 16px; + color: #4b4b4b +} + +.fblock-content p { + font-size: 13px +} + +.fblock-content a { + font-size: 16px; + color: #19549d +} + +.fblock-content ul { + padding: 0 +} + +.fblock-content ul li { + list-style-type: none +} + +.seti-txt_ { + font-size: 14px; + color: #4b4b4b +} + +.footer-title_new { + font-weight: 700; + display: block; + font-size: 16px; + color: #4b4b4b; + margin-bottom: 10px +} + +.catalogs-link-footer { + font-size: 14px; + color: #0f6fc7!important; + position: relative; + text-decoration: none; + padding-left: 20px +} + +.catalogs-link-footer:before { + width: 13px; + height: 16px; + background: url(../images/new_img/ico/ico-10.png) no-repeat; + content: ''; + position: absolute; + top: 50%; + margin-top: -8px; + left: 0 +} + +.catalogs-link-footer:hover { + text-decoration: underline +} + +.style { + width: 100%; + float: left +} + +.new_vacancy { + list-style: none; + padding-left: 0; + margin: 0 +} + +.new_vacancy li { + width: 100%; + float: left; + padding-left: 11px; + position: relative; + font-size: 14px; + color: #4b4b4b +} + +.new_vacancy li:before { + position: absolute; + content: ''; + width: 5px; + height: 5px; + border-radius: 100%; + background: #a7acb0; + left: 0; + top: 50%; + margin-top: -2px +} + +.summary_footer { + font-size: 14px; + color: #4b4b4b; + width: 100%; + float: left; + margin-bottom: 0; + margin-top: 38px +} + +.mail-summary-footer { + font-size: 14px; + color: #0f6fc7!important; + text-decoration: none +} + +.footer_phones { + font-size: 22px; + color: #4b4b4b; + margin: 0 +} + +.footer_phones span { + color: #a7acb0 +} + +.footer-phones-wr tr td { + vertical-align: middle; + height: 28px +} + +.footer-phones-wr img { + vertical-align: middle +} + +.footer-phones-wr table tr td:first-child { + width: 26px +} + +.footer_callback { + font-size: 14px!important; + margin-top: 3px +} + +.box-studio-wr { + height: 48px; + margin-top: 20px; + background: #a7acb0 +} + +.box-studio-wr p { + margin: 0; + font-size: 13px; + color: #fff; + line-height: 48px +} + +.artweb-wr { + width: 100%; + float: right; + height: 48px; + position: relative +} + +.artweb-wr a { + height: 48px; + line-height: 48px; + text-decoration: underline; + font-size: 13px; + float: right; + margin-right: 36px; + color: #fff +} + +.artweb-img { + width: 24px; + height: 23px; + position: absolute; + right: 0; + top: 50%; + margin-top: -11px; + cursor: default +} + +.artweb-img a { + margin: 0; + padding: 0; + width: 24px; + height: 23px; + display: block +} + +.artweb-img img { + width: 100%; + height: 100%; + float: left +} + +.artweb-wr:hover a { + text-decoration: none +} + +.btn-fixeds { + position: fixed; + bottom: 0; + height: 44px; + width: 150px; + background: #fff; + box-shadow: 0 0 7px 0 rgba(0,0,0,0.35) +} + +.btn-fixeds a { + display: block; + width: 100%; + height: 100%; + line-height: 44px; + text-align: center; + text-decoration: none; + text-transform: uppercase; + font-size: 15px; + font-weight: 700 +} + +.fixed-events { + border-bottom: 3px solid #ed1c24; + right: 40px +} + +.fixed-events a { + color: #ed1c24 +} + +.fixed-sale { + border-bottom: 3px solid #01974a; + left: 40px +} + +.fixed-sale a { + color: #01974a +} + +.brbeadcrumbs-wr { + height: 83px; + line-height: 83px +} + +.section-posts-wr { + background: #fff; + padding-top: 47px; + padding-bottom: 47px +} + +.search-title { + font-size: 15px; + color: #4b4b4b; + text-transform: uppercase; + font-weight: 700 +} + +.blog-search .form-control { + height: 66px; + border: 16px solid #a7acb0; + margin-top: 10px; + outline: none!important; + border-radius: 0!important; + background: #fff!important +} + +input:-webkit-autofill,textarea:-webkit-autofill,select:-webkit-autofill { + background: #fff!important +} + +.blog-search .form-control:focus { + box-shadow: 1px 2px 2px 0 rgba(215,215,215,0.75) inset; + transition: .1s; + -webkit-transition: .1s +} + +.blog-search .new-btn-search { + top: 28px; + right: 16px +} + +.posts-title,.seo-text h2:first-child { + margin-top: 0 +} + +.seo-text h2,.seo-text h1,.seo-text h3,.posts-title { + text-transform: uppercase +} + +.seo-text h2,.posts-title { + font-size: 15px; + font-weight: 700; + margin-bottom: 0 +} + +.posts-margin { + margin-top: 47px +} + +.seo-text p { + font-size: 14px; + color: #4b4b4b; + margin-top: 19px; + margin-bottom: 0; + line-height: 18px +} + +.seo-text p:first-of-type { + margin-top: 10px +} + +.posts-links { + padding: 0 0 0 15px +} + +.posts-links li { + width: 100%; + float: left; + color: #a7acb0; + margin-top: 15px +} + +.posts-links li:first-child { + margin-top: 9px +} + +.posts-links li a { + color: #0f6fc7; + font-size: 14px +} + +.posts-line-wr { + margin-top: 17px +} + +.posts-line-wr a { + font-size: 13px; + color: #0f6fc7; + float: right; + padding: 0 13px 0 6px; + position: relative; + height: 16px; + display: block +} + +.posts-line-wr a:hover { + text-decoration: none!important; + opacity: .8 +} + +.posts-line-wr a:before { + width: 7px; + height: 7px; + background: url(../images/new_img/ico/ico-12.png) no-repeat; + content: ''; + position: absolute; + top: 50%; + margin-top: -3px; + right: 0 +} + +.all_seo_text:before { + height: 4px; + background: url(../images/new_img/ico/ico-13.png) no-repeat!important; + margin-top: -2px +} + +.all_seo_text.show:before { + transform: rotate(180deg); + -webkit-transform: rotate(180deg) +} + +.posts-line-wr div { + overflow: hidden +} + +.posts-line-wr div span { + width: 100%; + height: 12px; + border-bottom: 1px solid #e4e4e4; + display: block +} + +.posts-links { + overflow: hidden; + max-height: 399px; + margin-bottom: 0 +} + +.seo-text { + position: relative; + height: 399px; + overflow: hidden; + min-height: 415px +} + +.seo-text:before { + content: ''; + display: block; + position: absolute; + bottom: 0; + right: 0; + left: 0; + height: 45px; + background: -moz-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%); + background: -webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(255,255,255,0)),color-stop(100%,#fff)); + background: -webkit-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%); + background: -o-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%); + background: -ms-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%); + background: linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%) +} + +.seo-text.show { + height: auto +} + +.seo-text.show:before { + display: none +} + +.home-popular-wr { + margin-top: 28px +} + +.home-popular { + list-style: none +} + +.home-popular li { + float: left; + margin-left: 20px +} + +.home-popular li:first-child { + margin-left: 0 +} + +.home-popular li a { + text-decoration: none!important; + text-transform: uppercase!important; + color: #0f6fc7!important; + font-size: 15px!important; + font-weight: 700 +} + +.home-popular li.active a { + color: #4b4b4b!important +} + +.home-popular-slider { + margin-top: 6px +} + +.short-desc_wr { + padding: 0 15px; + margin-top: 19px +} + +.in_stock_wr { + font-size: 11px; + color: #a7acb0; + margin-top: 9px +} + +.in_stock_ { + float: left +} + +.in_stock_ span { + position: relative; + padding-left: 12px +} + +.yes_stock { + float: left +} + +.no_stock { + float: right +} + +.in_stock_ span:before { + left: 0; + top: 50%; + content: ''; + position: absolute +} + +.yes_stock:before { + width: 8px; + height: 6px; + margin-top: -3px; + background: url(../images/new_img/ico/ico-17.png) no-repeat +} + +.no_stock:before { + width: 6px; + height: 6px; + margin-top: -3px; + background: url(../images/new_img/ico/ico-18.png) no-repeat +} + +.title-sku { + float: right +} + +.title-name_ a,.title-name_ a p,.title-name_ a span { + margin: 0; + padding: 0 +} + +.title-name_ a { + display: block; + float: left; + color: #0f6fc7 +} + +.title-name_ a p { + font-size: 14px; + width: 100%; + height: 19px; + overflow: hidden; + float: left; + text-transform: lowercase +} + +.title-name_ a p:first-child { + font-size: 16px; + text-transform: none; + font-weight: 700; + height: 39px; + line-height: 19px +} + +.title-name_ a:hover p span { + border-bottom: 1px solid #0f6fc7 +} + +.currency_price { + display: block; + float: left; + line-height: 38px; + font-size: 16px; + color: #4b4b4b +} + +.price-basket { + float: right +} + +.price-basket a { + width: 38px; + height: 38px; + margin-right: 0 +} + +.price-basket-wr { + margin-top: 17px +} + +.home-popular-slider .owl-buttons .owl-prev,.home-popular-slider .owl-buttons .owl-next { + top: 0!important; + right: 38px!important; + left: auto!important; + width: 19px!important; + height: 19px!important; + border-radius: 100%!important; + background: none!important +} + +.home-popular-slider .owl-buttons .owl-prev:hover,.home-popular-slider .owl-buttons .owl-next:hover { + background: #a7acb0!important +} + +.home-popular-slider .owl-buttons .owl-prev:before,.home-popular-slider .owl-buttons .owl-next:before { + background: url(../images/new_img/ico/ico-19.png)!important; + background-repeat: no-repeat!important; + width: 5px!important; + height: 9px!important; + top: 50%!important; + left: 50%!important; + margin-top: -5px!important; + margin-left: -3px!important +} + +.home-popular-slider .owl-buttons .owl-prev:before { + background-position: 0 0!important +} + +.home-popular-slider .owl-buttons .owl-next:before { + background-position: -5px 0!important +} + +.home-popular-slider .owl-buttons .owl-next { + right: 13px!important +} + +.home-popular-slider .owl-buttons .owl-prev:hover:before,.home-popular-slider .owl-buttons .owl-next:hover:before { + background: url(../images/new_img/ico/ico-20.png)!important +} + +.home-popular-slider .owl-buttons .owl-next:hover:before { + background-position: -5px 0!important +} + +.new-slider-wr .item { + width: 100%; + text-align: center +} + +.new-slider-wr .owl-buttons { + display: none +} + +#prev_slide,#next_slide { + position: absolute; + top: 50%; + margin-top: -38px; + width: 32px; + height: 76px; + background: rgba(0,0,0,0.2); + border-radius: 4px; + cursor: pointer +} + +#prev_slide:hover,#next_slide:hover { + background: rgba(0,0,0,0.8) +} + +#prev_slide:before,#next_slide:before { + position: absolute; + content: ''; + width: 14px; + height: 24px; + top: 50%; + left: 50%; + margin-top: -12px; + margin-left: -7px; + background: url(../images/new_img/ico/ico-14.png); + background-repeat: no-repeat +} + +#prev_slide:before { + background-position: 0 0 +} + +#next_slide:before { + background-position: -14px 0 +} + +#prev_slide { + left: 20px +} + +#next_slide { + right: 20px +} + +.call_block,.call_block_header { + position: relative +} + +.call_block_header { + width: 290px; + margin-top: 12px +} + +.call_block .call_block_title,.call_block_header .call_block_header_title { + float: left; + display: block; + font-size: 16px; + text-transform: uppercase; + font-weight: 700; + line-height: 22px; + height: 24px; + color: #2e2e2e +} + +.call_block_header .call_block_header_title { + display: inline-block; + margin-right: 10px; + text-transform: none +} + +.call_block a.city-phone,.call_block_header a.city-phone-header { + position: relative; + color: #0156a9; + text-decoration: none; + border-bottom: 1px dashed #145597; + cursor: pointer +} + +.call_block_header a.city-phone-header { + border: none +} + +.dropdown-popup.popup-city-phones,.dropdown-popup-header.popup-city-phones { + top: 20px; + left: 90px +} + +.hide_city_block,.hide_city_block_header { + display: none +} + +.popup-city-phones p,.popup-city-phones-header p { + margin: 12px +} + +.call_block .call_block_title > span.arr,.call_block_header .call_block_header_title > span.arr { + background: url(/images/sprites/arrows.png) 0 -24px no-repeat; + display: inline-block; + width: 7px; + height: 4px; + margin: 5px 0 0 +} + +.call_block .phone-select,.call_block_header .phone-select-header { + display: flex; + float: left; + margin: 5px 5px 5px 0; + width: 60px +} + +.call_block_header .phone-select-header { + margin-right: 10px; + margin-top: 3px +} + +.call_block .phone,.call_block_header .phone { + font-size: 21px; + line-height: 24px; + color: #390; + white-space: nowrap; + width: 140px; + cursor: pointer +} + +.call_block_header .phone { + font-size: 18px +} + +.city_blocks_header,.phones-header { + display: inline-block +} + +.call_block_header .phone { + width: 130px; + display: inline-block +} + +.call_block .phone.hide-operator,.call_block_header .phone.hide-operator { + display: none +} + +.call_block .phone span { + font-size: 13px; + color: #443d35 +} + +.call_block_header .phone span { + font-size: 18px; + color: #999 +} + +.call_block .phone-select .select-left-landline,.call_block .phone-select .select-left-life,.call_block .phone-select .select-left-mts,.call_block .phone-select .select-left-kstar { + background: url(/images/sprites/head_phones_icons.png) 0 -150px no-repeat; + height: 21px; + width: 39px; + cursor: pointer +} + +.call_block_header .phone-select-header .select-left-landline,.call_block_header .phone-select-header .select-left-life,.call_block_header .phone-select-header .select-left-mts,.call_block_header .phone-select-header .select-left-kstar { + float: left; + display: block; + background: url(/images/sprites/head_phones_header_icons.png) 0 -150px no-repeat; + height: 21px; + width: 39px; + cursor: pointer +} + +.call_block .phone-select .select-right { + background: url(/images/sprites/head_phones_icons.png) 0 -234px no-repeat; + cursor: pointer; + height: 21px; + width: 19px +} + +.call_block_header .phone-select-header .select-right { + display: inline-block; + background: url(/images/sprites/head_phones_header_icons.png) 0 -234px no-repeat; + cursor: pointer; + height: 21px; + width: 19px +} + +.call_block .request_callback a,.call_block_header .request_callback a { + color: #0156a9; + text-decoration: none; + border-bottom: 1px dashed #145597 +} + +.dropdown-popup,.dropdown-popup-header { + top: 50px; + position: absolute; + z-index: 2; + -webkit-border-radius: 5px; + border-radius: 5px; + background-color: #fff; + border: 1px solid #d3d3d3; + display: none +} + +.popup-phone-operators p,.popup-phone-operators-header p { + padding: 3px 0 0 22px; + margin: 10px; + background: url(/images/sprites/head_phones_icons.png) 0 0 no-repeat; + text-align: left +} + +.popup-phone-operators p span,.popup-city-phones p span,.popup-phone-operators-header p span,.popup-city-phones-header p span { + color: #0c549c; + cursor: pointer; + border-bottom: 1px dashed #0c549c; + font-size: 1em; + position: relative; + top: -3px +} + +.popup-phone-operators p.life,.popup-phone-operators-header p.life { + background-position: 0 -29px +} + +.popup-phone-operators p.kstar,.popup-phone-operators-header p.kstar { + background-position: 0 -59px +} + +.popup-phone-operators p.landline,.popup-phone-operators-header p.landline { + background-position: 0 -89px +} + +.call_block .phone-select .select-left-mts,.call_block_header .phone-select-header .select-left-mts { + background-position: 0 -192px +} + +.call_block .phone-select .select-left-kstar,.call_block_header .phone-select-header .select-left-kstar { + background-position: 0 -213px +} + +.call_block .phone-select .select-left-life,.call_block_header .phone-select-header .select-left-life { + background-position: 0 -171px +} + +footer .soc li { + float: left; + margin: 0 0 0 15px +} + +footer .soc li:first-child { + margin-left: 0 +} + +footer .soc li a { + float: left; + width: 31px; + height: 31px; + background-image: url(/images/sprites/icons.png); + background-repeat: no-repeat; + border-radius: 3px +} + +footer .soc li a.facebook { + background-position: 0 0 +} + +footer .soc li a.vkontakte { + background-position: 0 -31px +} + +footer .soc li a.twitter { + background-position: 0 -62px +} + +footer .soc li a.youtube { + background-position: 0 -518px +} + +footer .soc li a.google { + background-position: 0 -757px +} + +.copy { + color: #000; + font-size: 13px; + margin: 5px 0 +} + +ul.copy { + padding: 0 15px +} + +.first_list_copy { + margin-top: 30px +} + +ul.copy li { + display: block; + float: left +} + +.first_list_copy li { + margin: 0 15px +} + +.first_list_copy li:first-child { + margin-left: 0 +} + +ul.copy li a { + color: #0f6fc7; + font-size: 13px +} + +.second_list_copy li { + position: relative; + padding: 0 +} + +.second_list_copy li a { + font-size: 12px; + padding: 0 5px; + position: relative +} + +.second_list_copy li:nth-child(2) { + padding-left: 0 +} + +.second_list_copy li a:before { + position: absolute; + content: ''; + width: 1px; + height: 12px; + background: #0f6fc7; + left: 0; + top: 50%; + margin-top: -6px +} + +.second_list_copy li:nth-child(2) a:before,.second_list_copy li:first-child a:before { + display: none +} + +ul.cats_and_prices { + display: inline-block; + background: #666; + color: #fff; + padding: 10px 20px; + margin: 0 +} + +ul.cats_and_prices li { + display: inline-block; + margin: 0 5px +} + +ul.cats_and_prices li a { + color: #fff; + text-transform: uppercase; + text-decoration: none +} + +footer .vacancies ul { + margin-left: 20px!important +} + +footer .vacancies ul li { + list-style-type: circle!important +} + +footer .vacancies p { + font-size: 14px +} + +.up_arr { + width: 88px; + background-color: #e5e5e5; + text-align: center; + height: 48px; + position: fixed; + right: 20px; + bottom: 80px; + z-index: 2000; + border: 2px solid #fff; + box-shadow: 0 0 5px rgba(0,0,0,0.2); + display: none; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.up_arr a { + text-decoration: none +} + +.up_arr a .icon { + width: 16px; + height: 11px; + background: url(/images/sprites/icons.png) 0 -664px no-repeat; + position: absolute; + z-index: 1; + left: 50%; + top: 9px; + margin-left: -8px +} + +.up_arr a .text { + border-bottom: 1px dashed #333; + color: #333; + display: block; + font-size: 12px; + line-height: 15px; + margin: 0 auto; + padding-top: 25px; + width: 50px +} + +.up_arr a:hover .text { + border-bottom: none +} + +.breadcrumbs { + line-height: 20px; + font-size: 14px; + margin: 10px 0; + font-family: 'Roboto',sans-serif +} + +.breadcrumbs ul li.has_link { + cursor: pointer +} + +.breadcrumbs ul li.bread_item { + display: inline-block; + position: relative; + z-index: 10; + color: #333; + margin: 0 5px 0 0 +} + +.breadcrumbs li.bread_item > a { + color: #0156a9 +} + +.filters,.columnLeftInfo { + width: 95%; + max-width: 300px +} + +.filters,.columnLeftInfo img { + max-width: 100% +} + +.columnLeftInfo .prodview { + background: #f5f5f5; + border-radius: 4px; + overflow: hidden; + font: 12px/16px Arial; + margin: 20px 0 +} + +.columnLeftInfo .prodview ul { + padding: 0 +} + +.columnLeftInfo .prodview ul li { + padding: 10px 20px 5px; + border-bottom: 1px solid #dbdbdb; + list-style-type: none +} + +.columnLeftInfo .prodview ul li:last-child { + border-bottom: none +} + +.columnLeftInfo .prodview ul li a { + font-size: 12px; + font-weight: 700; + color: #333; + margin: 0 0 10px +} + +.pv_title { + font-size: 20px; + font-weight: 700; + padding: 10px 20px 5px +} + +.filters .properties { + background: #f5f5f5; + border-radius: 4px; + font: 12px/16px Arial +} + +.filters .properties .tab.active_tab { + display: block +} + +.filters .properties .properties_block { + padding: 10px 20px 5px; + border-bottom: 1px solid #dbdbdb +} + +.filters .properties .properties_block .block_title { + font-size: 12px; + font-weight: 700; + color: #333; + margin: 0 0 10px +} + +.filters .properties .properties_block .inpt { + float: left; + width: 55px; + margin-bottom: 20px; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box +} + +.filters .properties .properties_block .inpt input { + text-align: center; + color: #333; + font-size: 11px +} + +.filters .properties .properties_block .finput { + display: inline-block +} + +.filters .properties .properties_block button.sok { + display: inline-block +} + +.filters .properties .properties_block .mdash { + float: left; + padding: 0 10px; + line-height: 30px; + color: #666 +} + +.filters .properties .properties_block .grn { + font-size: 11px; + line-height: 30px; + color: #c2c2c2; + float: left; + padding: 0 0 0 10px +} + +.filters .properties .properties_block { + padding: 10px 20px 5px; + border-bottom: 1px solid #dbdbdb +} + +.filters .properties .properties_block .chechboxes { + padding: 0; + margin: 0; + list-style: none +} + +.filters .properties .properties_block .chechboxes li { + position: relative; + z-index: 1; + padding: 0 0 0 20px; + margin: 0 0 5px; + line-height: 15px; + color: #333 +} + +.filters .properties .properties_block .chechboxes li input { + padding: 0; + margin: 1px 5px 0 0; + float: left +} + +.filters .properties .properties_block .chechboxes li div { + overflow: hidden +} + +.filters .properties .properties_block .chechboxes li label { + display: inline-block +} + +.filters .properties .properties_block .chechboxes li label a { + color: #0156a9; + text-decoration: none; + border-bottom: 1px dotted #0156a9 +} + +.inpt { + height: 18px; + line-height: 18px; + padding: 4px; + border-radius: 4px; + border-top: 1px solid #d9d9d9; + border-left: 1px solid #e4e4e4; + border-right: 1px solid #e4e4e4; + border-bottom: 1px solid #e9e9e9; + background-color: #fff +} + +.inpt input { + width: 100%; + height: 18px; + line-height: 18px; + background: transparent; + border: 0 +} + +.ui-slider { + border: 1px solid #aaa; + height: 11px; + font-size: 1px; + position: relative; + z-index: 1; + background-color: #fff; + border-radius: 4px +} + +.ui-slider-range { + position: absolute; + z-index: 1; + left: 0; + top: 0; + height: 100%; + background-color: #e2e2e2; + border-radius: 3px +} + +.filters .properties .properties_block .ui-slider { + border: none; + height: 3px; + background: #c2c2c2; + box-shadow: 0 1px 0 #a6a6a6 inset; + border-radius: 3px; + margin: 0 0 5px +} + +.filters .properties .properties_block .ui-slider-range { + background: #0156a9 +} + +.ui-slider-handle { + position: absolute; + z-index: 2; + outline: 0; + border: 1px solid #d3d3d3; + margin-left: -9px; + top: -3px; + cursor: default; + height: 16px; + width: 16px; + border-radius: 4px; + background: #ededed; + background: -moz-linear-gradient(top,#ededed 0,#e6e6e6 100%); + background: -webkit-gradient(linear,left top,left bottom,color-stop(0,#ededed),color-stop(100%,#e6e6e6)); + background: -webkit-linear-gradient(top,#ededed 0,#e6e6e6 100%); + background: -o-linear-gradient(top,#ededed 0,#e6e6e6 100%); + background: -ms-linear-gradient(top,#ededed 0,#e6e6e6 100%); + background: linear-gradient(to bottom,#ededed 0,#e6e6e6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#e6e6e6',GradientType=0) +} + +.filters .properties .properties_block .ui-slider-handle { + width: 13px; + height: 11px; + background: url(/images/sprites/filter_icons.png) -13px -16px no-repeat; + border: none; + filter: none; + margin-left: -6px; + top: -14px; + cursor: e-resize; + border-radius: 0 +} + +.sliderblock { + position: relative +} + +.sliderblock .sliderblock-name { + float: left; + padding-right: 10px; + padding-top: 7px; + font-weight: 700 +} + +.filters .properties .properties_block.opened .block_title,.filters .properties .properties_block.closed .block_title { + position: relative; + z-index: 1; + cursor: pointer +} + +.filters .properties .properties_block.closed .block_title i,.filters .properties .properties_block.opened .block_title i { + position: absolute; + z-index: 1; + left: -10px; + top: 0; + border-color: #f5f5f5 transparent; + background-color: #909090; + border-style: solid; + border-width: 4px 0 4px 4px; + margin: 3px 10px 0 0 +} + +.filters .properties .properties_block.opened .block_title i { + border-width: 4px 4px 0; + border-color: #909090 transparent; + background: #f5f5f5; + left: -12px; + top: 3px +} + +.filters .properties .button { + padding: 10px; + text-align: center +} + +.filters .properties .button .disabled { + display: none +} + +.filter_tooltip { + z-index: 1000; + position: absolute; + right: -120px; + top: 0; + text-align: left; + border: 1px solid #d3d3d3; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + padding: 6px 8px; + min-width: 50px; + max-width: 300px; + color: #696969; + background-color: #fff; + box-shadow: 1px 1px 2px #ccc +} + +.filter_tooltip.width_slider { + top: 60px +} + +.filter_tooltip.depth_slider { + top: 120px +} + +.btn.btn-small { + font-size: 12px; + padding: 0 10px +} + +.price_tooltip_close { + float: right; + width: 15px; + height: 15px; + margin: -6px -5px 0 0; + background: url(/images/sprites/filter_icons.png) 0 0 no-repeat; + cursor: pointer; + text-decoration: none +} + +.tip-arrow.tip-arrow-left { + margin-top: -5px; + margin-left: -6px; + top: 50%; + left: 0; + width: 6px; + height: 12px; + background: url(/images/sprites/tip-white.png) no-repeat 0 0; + position: absolute +} + +.price_tooltip_close { + position: static; + float: right; + margin: 3px 0 0 10px +} + +#filters_main .buttonReset { + text-align: right; + padding: 5px 10px; + margin-top: 20px; + text-decoration: underline +} + +#filters_main .buttonReset i { + display: inline-block; + float: none; + z-index: 1; + right: 0; + top: 50%; + margin: -7px 0 0 5px; + width: 15px; + height: 15px; + background: url(/images/sprites/filter_icons.png) 0 0 no-repeat; + cursor: pointer; + text-decoration: none +} + +.cat-content .title { + margin: 5px 0 10px +} + +.list_filters_links { + position: relative; + z-index: 1; + border-bottom: 1px solid #ccc; + padding: 0 0 5px; + margin: 0 0 30px +} + +.list_filters_links .view_type { + padding: 0; + margin: 0; + list-style: none; + float: right +} + +.list_filters_links .view_type li { + float: left; + margin: 0 0 0 10px +} + +.list_filters_links .view_type li.view_text { + font-size: 12px; + color: #626262; + line-height: 21px; + margin: 0 +} + +.list_filters_links .view_type li.view_list,.list_filters_links .view_type li.view_table,.list_filters_links .view_type li.view_fast,.list_filters_links .view_type li.view_short,.list_filters_links .view_type li.view_mini_table { + width: 21px; + height: 21px; + background: #ededed; + border-radius: 2px; + position: relative; + z-index: 1; + cursor: pointer +} + +.list_filters_links .view_type li.view_list.selected,.list_filters_links .view_type li.view_table.selected,.list_filters_links .view_type li.view_mini_table.selected,.list_filters_links .view_type li.view_fast.selected,.list_filters_links .view_type li.view_short.selected { + background: #bcbcbc; + cursor: default +} + +.list_filters_links .view_type li.view_list span,.list_filters_links .view_type li.view_table span,.list_filters_links .view_type li.view_fast span,.list_filters_links .view_type li.view_short span,.list_filters_links .view_type li.view_mini_table span { + position: absolute; + z-index: 1; + width: 15px; + height: 15px; + background-image: url(/images/sprites/icons.png); + background-repeat: no-repeat; + left: 3px; + top: 3px +} + +.list_filters_links .view_type li.view_list span { + background-position: -16px -801px +} + +.list_filters_links .view_type li.view_table span { + background-position: 0 -801px +} + +.list_filters_links .view_type li.view_mini_table span { + background-position: -16px -841px +} + +.list_filters_links .sort_links li { + float: left; + margin: 0 25px 0 0; + font-size: 13px; + line-height: 21px; + position: relative; + z-index: 1; + list-style-type: none +} + +.list_filters_links .sort_links li a { + color: #333; + text-decoration: underline +} + +.list_filters_links .sort_links li.selected a,.list_filters_links .sort_links li a:hover { + color: #999; + text-decoration: none +} + +.list_filters_links .sort_links li.selected .arr { + display: block +} + +.list_filters_links .sort_links li .arr { + position: absolute; + z-index: 1; + width: 25px; + height: 13px; + background: url(/images/sprites/icons.png) 0 -788px no-repeat; + left: 50%; + top: 26px; + margin-left: -12px; + display: none +} + +.list_filters_links .sort_links li.selected a { + cursor: default +} + +.list_filters_links .pagination { + float: right; + margin: 0 0 0 25px; + font-size: 13px; + line-height: 21px; + position: relative; + z-index: 1; + list-style-type: none +} + +.list_filters_links .pagination select,.list_filters_links .pagination li { + display: inline-block +} + +.catalog_product_list { + margin: 0 0 20px +} + +.slider_mp_items .catalog_product_list { + margin: 0 +} + +.catalog_product_list.view_table .catalog_item,.category_popular_list .catalog_item { + float: left; + width: 33%; + height: 420px; + margin: 0 0 10px; + position: relative; + z-index: 1 +} + +.catalog_product_list .catalog_item.home_slider_it { + height: 425px; + border: 1px solid #e4e4e4; + float: none; + margin: 0 +} + +.catalog_product_list.view_table.view_list .catalog_item { + width: 100%; + border: none +} + +.catalog_product_list.view_table.view_mini_table .catalog_item { + float: left; + width: 14% +} + +.catalog_product_list.view_table .catalog_item .wrapper,.category_popular_list .catalog_item .wrapper { + position: absolute; + z-index: 1; + width: 100%; + min-height: 360px; + height: 360px; + overflow: hidden; + left: 0; + top: 0; + border-radius: 4px; + background: #fff; + -webkit-box-sizing: content-box!important; + -moz-box-sizing: content-box!important; + box-sizing: content-box!important +} + +.catalog_product_list .catalog_item.home_slider_it .wrapper { + position: relative; + z-index: 1; + width: 100%; + height: 100%; + min-height: 100%; + overflow: hidden; + background: #fff; + left: auto; + top: auto; + border-radius: 0; + box-sizing: border-box!important +} + +.status_block-wr { + position: absolute; + top: 20px; + left: 20px; + width: 42px; + height: 42px; + z-index: 999 +} + +.staus_new,.staus_hit,.status_sale { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-radius: 100%; + overflow: hidden +} + +.staus_new { + background: url(../images/new_img/ico/ico-15.png) no-repeat +} + +.staus_hit { + background: url(../images/new_img/ico/ico-16.png) no-repeat +} + +.status_sale { + background: #e22229; + color: #fff; + text-align: center; + font-size: 14px; + font-weight: 700; + line-height: 42px; + cursor: pointer +} + +.catalog_product_list.view_table.view_list .catalog_item .wrapper { + height: 300px; + min-height: 300px +} + +.catalog_product_list.view_table.view_mini_table .wrapper { + min-height: 270px; + height: 270px +} + +.catalog_product_list.view_table .catalog_item:hover,.category_popular_list .catalog_item:hover { + z-index: 1999 +} + +.catalog_product_list.view_table .catalog_item .wrapper:hover { + box-shadow: 0 0 5px #ccc; + padding: 0 20px; + margin-left: -20px +} + +.catalog_product_list.view_table .catalog_item.home_slider_it .wrapper:hover { + padding: 0; + margin-left: 0 +} + +.catalog_product_list.view_table .catalog_item.home_slider_it:hover { + box-shadow: 0 0 12px 0 rgba(0,0,0,0.35); + padding: 0; + margin-left: 0 +} + +.catalog_product_list.view_table .catalog_item .wrapper:hover { + height: auto +} + +.catalog_item.home_slider_it .img a { + display: table-cell; + width: 172px; + height: 258px; + vertical-align: middle; + float: none +} + +.catalog_product_list.view_table .catalog_item .wrapper .item_container,.category_popular_list .catalog_item .wrapper .item_container { + padding: 15px 5px +} + +.catalog_product_list .catalog_item.home_slider_it .wrapper .item_container { + height: 100%; + padding: 0 +} + +.slider_mp_items .owl-carousel .owl-item { + padding: 7px 15px 30px +} + +.catalog_product_list .catalog_item .img,.category_popular_list .catalog_item .img { + min-height: 205px +} + +.catalog_product_list .img,.category_popular_list .catalog_item .img { + margin: 0 0 10px; + position: relative; + z-index: 1 +} + +.catalog_product_list.view_table.view_list .img,.category_popular_list.view_table.view_list .catalog_item .img { + float: left; + width: 20%; + position: inherit +} + +.catalog_product_list .catalog_item .img img,.category_popular_list .catalog_item .img img { + max-width: 250px; + max-height: 250px; + min-height: 15px; + display: block; + margin: 0 auto +} + +.catalog_product_list .catalog_item .img img.selected,.category_popular_list .catalog_item .img img.selected { + display: block +} + +.catalog_product_list .catalog_item.home_slider_it .img img { + max-width: 172px; + max-height: 258px; + margin: 0 auto; + vertical-align: middle; + display: block +} + +.catalog_product_list .catalog_item.home_slider_it .img { + height: 258px; + display: table; + margin: 0 auto; + margin-top: 9px +} + +.catalog_product_list .catalog_item .img img.selected,.category_popular_list .catalog_item .img img.selected { + display: block +} + +.catalog_product_list.view_table.view_list .catalog_item .img img.selected { + max-width: 100%; + height: auto +} + +.catalog_product_list.view_table .info_icons { + display: none +} + +.catalog_product_list.view_table.view_list .info_icons { + display: block +} + +.catalog_product_list.view_table .catalog_item:hover .info_icons,.category_popular_list .catalog_item:hover .info_icons { + display: block +} + +.catalog_product_list.view_table .info_icons .btn { + display: inline-block; + padding: 4px 14px; + margin: 0; + margin-bottom: 0; + font-family: 'Roboto'; + font-size: 16px; + line-height: 20px; + color: #fff; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-color: #256caf; + background-image: -webkit-gradient(linear,0 0,0 100%,from(#2175c2),to(#2668a5)); + background-image: -webkit-linear-gradient(top,#2175c2,#2668a5); + background-image: -o-linear-gradient(top,#2175c2,#2668a5); + background-image: linear-gradient(to bottom,#2175c2,#2668a5); + background-image: -moz-linear-gradient(top,#2175c2,#2668a5); + background-repeat: repeat-x; + border: 0; + border-top: 1px solid #256caf; + border-bottom: 1px solid #256caf; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff2175c2',endColorstr='#ff2668a5',GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + text-decoration: none +} + +.catalog_product_list.view_table .info_icons,.category_popular_list .catalog_item .info_icons,.catalog_product_list .brand_logo { + position: absolute; + z-index: 1; + right: 0; + bottom: -30px; + background: #fff; + box-shadow: 0 0 3px 5px #fff +} + +.catalog_product_list.view_table.view_list .info_icons { + background: transparent; + box-shadow: none; + top: 20px; + right: 20px; + bottom: inherit; + height: 100% +} + +.catalog_product_list.view_mini_table .info_icons { + width: 100px +} + +.catalog_product_list.view_mini_table .info_icons .btn { + width: 100% +} + +.catalog_product_list.view_table .users_info,.category_popular_list .catalog_item .users_info { + border-bottom: 1px dotted #ccc; + padding: 0 0 5px; + margin: 0 0 10px +} + +.catalog_product_list.view_table .catalog_item .title,.category_popular_list .catalog_item .title { + font-size: 16px; + line-height: 19px; + height: 39px; + overflow: hidden; + margin: 0 0 5px +} + +.catalog_product_list.view_table .catalog_item .spec_name { + background: red; + color: #fff; + position: absolute; + top: 125px; + font-size: 20px; + padding: 10px 20px; + z-index: 9; + border-top-right-radius: 15px +} + +.catalog_product_list.view_table.view_list .catalog_item .title { + display: none +} + +.catalog_product_list.view_table.view_mini_table .catalog_item .title { + display: none +} + +.catalog_product_list.view_table.view_mini_table .catalog_item:hover .title { + display: block +} + +.catalog_product_list.view_table .catalog_item .title a,.category_popular_list .catalog_item .title a { + color: #333; + text-decoration: none; + font-family: 'roboto',sans-serif +} + +.catalog_product_list .price,.category_popular_list .catalog_item .price { + font-size: 11px; + margin: 0 0 5px; + color: #333; + position: relative +} + +.old_price-wr { + position: absolute; + left: 0; + top: -18px +} + +.catalog_product_list.view_list .price { + display: none +} + +.catalog_product_list .price span,.category_popular_list .catalog_item .price span { + font-size: 16px; + font-family: roboto,sans-serif; + font-weight: bolder +} + +.catalog_product_list .additional_info.params,.category_popular_list .catalog_item .additional_info.params { + border-color: #fff; + border: none; + padding: 0; + border-top: 1px dotted #ccc; + padding: 5px 0 0 0; + margin: 15px 0 0 +} + +.catalog_product_list.view_list .additional_info.params,.category_popular_list.view_list .catalog_item .additional_info.params { + border: none; + float: left; + width: 80% +} + +.catalog_product_list.view_list .additional_info.params .additional_title { + font-weight: 700; + font-size: 20px; + display: block!important; + margin-bottom: 20px +} + +.catalog_product_list.view_list .additional_info.params .additional_title a { + color: #000 +} + +.catalog_product_list.view_list .additional_info.params .price { + display: block!important +} + +.catalog_product_list .additional_info.params .block_title { + font-weight: 700 +} + +.catalog_product_list.view_table .catalog_item .opacity_bg,.category_popular_list .catalog_item .opacity_bg { + background: url(/images/subrubric_opacity_bg.png) repeat-x scroll 0 0; + bottom: 0; + height: 20px; + left: 0; + position: absolute; + width: 100%; + z-index: 2 +} + +.catalog_product_list .additional_info.params .descr ul,.category_popular_list .catalog_item .additional_info.params .descr ul { + padding: 0; + margin-top: 10px +} + +.catalog_product_list .additional_info.params .descr ul li,.category_popular_list .catalog_item .additional_info.params .descr ul li { + list-style-type: none; + line-height: 17px; + padding: 0 0 5px +} + +.catalog_product_list .additional_info.params .descr ul span,.category_popular_list .catalog_item .additional_info.params .descr ul span { + color: #999 +} + +.catalog_product_list.view_table .info_icons .wishlike_block,.category_popular_list .catalog_item .info_icons .wishlike_block { + overflow: hidden; + float: left; + margin: 0 0 0 7px; + width: 85px +} + +.catalog_product_list.view_table.view_list .info_icons .wishlike_block { + position: absolute; + bottom: 50px; + display: none +} + +.catalog_product_list.view_table .info_icons .buy_button,.category_popular_list .catalog_item .info_icons .buy_button { + float: right +} + +.catalog_product_list.view_table .info_icons .wishlike_block li,.category_popular_list .catalog_item .info_icons .wishlike_block li { + position: relative; + font-size: 10px; + display: block; + margin-right: 0 +} + +.catalog_product_list .wishlike_block li .icon,.category_popular_list .catalog_item .wishlike_block li .icon { + width: 13px; + height: 11px; + background-image: url(/images/sprites/icons_opacity.png); + background-repeat: no-repeat; + position: absolute; + z-index: 1; + left: 0; + top: 2px; + float: left +} + +.catalog_product_list .wishlike_block li .like,.category_popular_list .catalog_item .wishlike_block li .like,.catalog_product_list .wishlike_block li .compare,.category_popular_list .catalog_item .wishlike_block li .compare { + text-decoration: none; + border-bottom: 1px dashed #0156a9; + color: #0156a9; + margin: 0 0 0 20px +} + +.catalog_product_list .wishlike_block li.compare .icon,.category_popular_list .catalog_item .wishlike_block li.compare .icon { + background-position: 0 -302px +} + +.catalog_product_list .wishlike_block li.like .icon,.category_popular_list .catalog_item .wishlike_block li.like .icon { + background-position: 0 -314px +} + +.catalog_product_list .privilages { + display: none; + border-left: 2px solid #289328; + padding: 2px 5px 2px 10px +} + +.catalog_product_list.view_table .catalog_item:hover .privilages { + display: block +} + +.catalog_product_list .privilages .priv_title { + color: #289328; + font-size: 13px; + font-weight: 700 +} + +.catalog_product_list .privilages p { + margin: 5px 0 0; + color: #999; + font-size: 11px +} + +.catalog_product_list .block_product_status { + text-decoration: underline; + color: #999; + position: relative; + float: right; + margin-bottom: -15px +} + +.catalog_product_list .block_product_status.av_none { + color: #930 +} + +.catalog_product_list .block_product_status.av,.catalog_product_list .additional_info.params .descr ul span.delivery_status { + color: #390 +} + +.delivery_status { + color: #390; + display: block; + padding-top: 4px +} + +.catalog_product_list .delivery_status img { + margin-top: -3px; + color: #999 +} + +.let_me_know { + border: 1px solid #ffb472; + background-color: #fff; + border-radius: 3px; + padding: 10px; + text-align: center; + font-size: 12px; + margin: 0 0 5px +} + +.catalog_product_list.view_table .catalog_item .let_me_know,.category_popular_list .catalog_item .let_me_know { + position: absolute; + z-index: 1; + right: 0; + bottom: -30px; + background: #fff; + border-radius: 4px; + padding: 2px 7px; + width: 87px +} + +.let_me_know a { + text-decoration: none; + color: #ff3c00; + border-bottom: 1px dashed #ff3c00; + font-size: 11px +} + +.catalog_product_list .sticker,.category_popular_list .sticker { + position: absolute; + z-index: 1; + left: 0; + bottom: 0; + background: #1eb600; + line-height: 18px; + padding: 0 7px; + border-radius: 2px; + color: #fff +} + +.catalog_product_list .sticker.saled,.category_popular_list .catalog_item .sticker.saled { + background: #d4d4d4; + color: #333; + font-size: 11px +} + +.paginator { + float: left; + margin: 40px 0 80px; + padding-right: 50px; + text-align: right; + width: 100% +} + +.paginator a { + color: #000; + background: #ededed; + border: 1px solid #bababa +} + +.paginator span.selected { + border-color: #ccc +} + +.paginator .points { + padding: 0 10px +} + +#myItemCarousel .item { + padding: 35px 50px +} + +#myItemCarousel .carousel-control.left,#myItemCarousel .carousel-control.right { + background: none +} + +#myItemCarousel .carousel-control { + width: 51px; + height: 157px +} + +#myItemCarousel .carousel-control-nav { + position: absolute; + top: 0; + width: 51px; + height: 157px; + background: url(/images/slider_nav2.png) 0 0 no-repeat +} + +#myItemCarousel .carousel-control-nav.left { + left: 0 +} + +#myItemCarousel .carousel-control-nav.right { + right: 0; + background: url(/images/slider_nav2.png) -51px 0 no-repeat +} + +.slider_mp_items h3 { + padding-left: 100px +} + +.slider_mp_items #myItemCarousel { + background: #fff +} + +.slider_mp_items .product_item .img,.prodview .product_item .img { + width: 140px; + height: 100px; + text-align: center; + margin: 0 15px 20px 0; + float: left +} + +.prodview .product_item .img { + border-right: 1px dotted #b8b8b8 +} + +.slider_mp_items .product_item .info,.prodview .product_item .info { + overflow: hidden; + margin: 0 0 5px; + text-align: left; + border-right: 1px dotted #b8b8b8 +} + +.prodview .product_item .info { + border-right: none +} + +#myItemCarousel .item .block-25:nth-child(4n) .info { + border-right: none +} + +#myItemCarousel .product_item .info .title,,.prodview .product_item .title { + font-size: 13px; + min-height: 45px; + padding: 5px 10px 0 0 + } + +#myItemCarousel .product_item .info .price,.prodview .product_item .info .price { + font-size: 16px; + font-weight: 700; + font-style: italic; + line-height: 20px; + color: #333; + font-family: Arial; + padding-bottom: 10px +} + +#myItemCarousel .product_item .info .price .currency,.prodview .product_item .info .price .currency { + font-weight: 400; + font-style: italic; + padding-left: 5px +} + +#myItemCarousel .product_item .info .rating li,.prodview .product_item .info .rating li { + float: left!important; + width: 10px; + height: 11px; + padding: 1px; + background-image: url(/images/sprites/icons.png); + background-repeat: no-repeat; + position: static; + border-radius: 0; + margin: 0; + border: none +} + +#myItemCarousel .product_item .info .rating li.active,.prodview .product_item .info .rating li.active { + background-position: -12px -93px +} + +.rating ul li.passive { + background: url(/images/sprites/icons_opacity.png) -28px -386px no-repeat +} + +.product_detail { + overflow: hidden +} + +.product_detail h1 { + font-family: 'roboto',sans-serif; + font-size: 21px; + line-height: 24px; + font-weight: 700; + padding: 0 15px 5px 0; + color: #333; + float: left +} + +.product_detail .product_code { + font-size: 11px; + color: #999; + padding: 0; + font-family: arial; + margin: 13px 0 10px; + white-space: nowrap; + float: left; + font-weight: 400; + line-height: 24px +} + +.product_detail .img_part { + max-width: 342px; + min-width: 327px; + width: 30%; + margin: 0 50px 30px 0; + float: left; + position: relative; + z-index: 1 +} + +.product_detail .img_part .position { + width: 100%; + position: relative; + z-index: 2; + margin-top: -50px; + top: 50px +} + +.product_detail .img_part .position.fixed { + max-width: 342px; + width: 30% +} + +.product_detail .img_part_big { + position: relative; + z-index: 1; + margin: 0 0 20px +} + +.product_detail .img_part .img_gallery li { + text-align: center; + position: relative; + z-index: 9999; + display: none; + min-height: 300px +} + +.product_detail .img_part .img_gallery li.selected { + display: block +} + +a.preview { + cursor: -webkit-zoom-in; + display: block +} + +.product_detail .img_part .img_gallery li > img { + width: auto; + max-width: 100%; + max-height: 300px; + display: block; + margin: 0 auto +} + +.product_detail .img_part .img_part_small_centered { + width: auto +} + +.product_detail .img_gallery li .zoom_container { + position: absolute; + z-index: 9999; + width: 450px; + height: 400px; + overflow: hidden; + left: 420px; + top: 0; + border: 2px solid #e1e1e1; + display: none; + border-radius: 10px; + box-shadow: 0 0 10px 20px #fff; + background: #fff +} + +.product_detail .img_gallery li .zoom_lupa { + position: absolute; + z-index: 1; + left: 0; + top: 0; + border: 1px solid #e1e1e1; + background: rgba(255,255,255,0.7); + display: none +} + +.product_detail .img_part .img_gallery li .lupa.zoom_active { + display: block +} + +.product_detail .img_part .img_gallery li .lupa { + position: absolute; + z-index: 1; + right: 0; + bottom: 0; + width: 33px; + height: 33px; + background: url(/images/sprites/arrs_carousel.png) 0 -272px no-repeat; + border-radius: 3px; + cursor: pointer; + display: none +} + +.img_part_small { + border-top: 1px solid #d8d8d8; + margin: 0 0 20px +} + +.product_detail .img_part .img_gallery_small { + max-width: 201px; + height: 75px; + overflow: hidden; + float: left; + margin-top: -13px +} + +.product_detail .img_part .img_part_small_centered .img_gallery_small { + max-width: none; + float: none; + margin-right: auto; + margin-left: auto +} + +.product_detail .img_part .img_gallery_small li { + width: 67px; + height: 67px; + padding: 8px 0 0; + margin: 0; + overflow: hidden; + float: left; + text-align: center +} + +.product_detail .img_part .img_gallery_small li img { + width: 51px; + height: 51px; + padding: 8px +} + +.product_detail .img_part .img_gallery_small li.selected { + background: url(/images/horizontal_carousel_item.png) center 0 no-repeat +} + +.detail_main_tabs { + margin: 0; + padding: 0 0 25px; + list-style: none; + background: #fff +} + +.detail_main_tabs li { + margin: 0 0 10px; + background: #e6e6e6; + position: relative; + z-index: 1; + border-radius: 4px +} + +.detail_main_tabs li.selected { + background-color: #4a4a4a; + box-shadow: 1px 1px 2px #000 inset +} + +.detail_main_tabs li .arr { + position: absolute; + z-index: 1; + width: 16px; + height: 34px; + background: url(/images/sprites/arrows.png) -23px -338px no-repeat; + top: 0; + right: -13px; + display: none +} + +.detail_main_tabs li.selected .arr { + display: block +} + +.detail_main_tabs li.selected a .text { + color: #ccc; + border-color: transparent +} + +.detail_main_tabs li.selected.comments .icon { + background-position: -19px -433px +} + +.detail_main_tabs li.selected.properties .icon { + background-position: -19px -397px +} + +.detail_main_tabs li a { + display: block; + line-height: 34px; + height: 34px; + padding: 0 10px 0 50px; + text-decoration: none; + position: relative; + z-index: 2 +} + +.detail_main_tabs li a .text { + font-size: 14px; + font-weight: 700; + color: #0156a9; + border-bottom: 1px dashed; + line-height: 14px +} + +.detail_main_tabs li .icon { + position: absolute; + z-index: 1; + left: 20px; + top: 50%; + background-image: url(/images/sprites/icons_opacity.png); + background-repeat: no-repeat; + height: 18px; + margin-top: -9px; + border: 0 +} + +.detail_main_tabs li.properties .icon { + width: 16px; + background-position: 0 -415px +} + +.detail_main_tabs li.comments .icon { + width: 18px; + background-position: 0 -433px +} + +.product_detail .img_part .floating_helper_block_wrapper { + background: #fff +} + +.product_detail .img_part .floating_helper_block { + background: #f7f7f7; + border-radius: 4px; + padding: 10px 0; + text-align: center; + line-height: 20px; + margin: 0 0 20px; + position: relative; + z-index: 1 +} + +.product_detail .img_part .floating_helper_block table { + width: 100%; + text-align: center; + padding: 0; + margin: 0; + border-collapse: collapse +} + +.product_detail .img_part .floating_helper_block .arr { + position: absolute; + z-index: 1; + width: 15px; + height: 13px; + left: 50%; + top: -13px; + margin: 0 0 0 -7px; + background: url(/images/sprites/arrows.png) 0 -56px no-repeat +} + +.product_detail .img_part .floating_helper_block .price { + font-size: 18px; + color: #666; + line-height: 48px; + font-weight: 700; + margin-left: 20px!important; + white-space: nowrap +} + +.product_detail .img_part .floating_helper_block .priceold { + text-decoration: line-through; + font-size: 14px; + color: #666; + padding-left: 30px +} + +.product_detail .floating_helper_block .wishlike_block li { + float: left; + margin: 0 15px 0 0; + position: relative; + font-size: 11px; + z-index: 1; + white-space: nowrap +} + +.product_detail .floating_helper_block .wishlike_block li a { + font-size: 11px; + text-decoration: none; + border-bottom: 1px dashed #0156a9; + color: #0156a9; + margin: 0 0 0 20px +} + +.product_detail .floating_helper_block .wishlike_block li .icon { + width: 13px; + height: 11px; + background-image: url(/images/sprites/icons_opacity.png); + background-repeat: no-repeat; + position: absolute; + z-index: 1; + left: 0; + top: 2px; + float: left +} + +.product_detail .floating_helper_block .wishlike_block li.compare .icon { + background-position: 0 -302px +} + +.product_detail .floating_helper_block .wishlike_block li.compare:hover .icon { + background-position: -20px -302px +} + +.product_detail .floating_helper_block .wishlike_block li.like .icon { + background-position: 0 -314px +} + +.floating_helper_block .wishlike_block li.like:hover .icon { + background-position: -20px -314px +} + +.product_detail .img_part .floating_helper_block .price { + margin: 0 5px; + text-align: left +} + +.modal-title .cart-icon { + float: left; + width: 25px; + height: 22px; + background: url(/images/sprites/icons.png) 0 -139px no-repeat; + margin: 0 10px 0 0 +} + +.product_detail .info { + overflow: hidden +} + +.product_detail .info_table,.product_detail .info_table table { + padding: 0; + margin: 0; + border-spacing: 0; + width: 100% +} + +.product_detail .info_table { + margin-bottom: 20px +} + +.product_detail .info_table .left_count { + height: 31px; + border-bottom: 1px solid #fff; + font-size: 12px; + text-align: center; + background-color: #f3f3f3; + border-radius: 5px 5px 0 0; + padding: 0; + margin: 0 +} + +.product_detail td.right_block { + height: 100%; + border-collapse: collapse +} + +.product_detail .info_table .left_count.available { + color: #390 +} + +.available { + color: #390 +} + +.product_detail .info_table .price_block { + background-color: #f3f3f3; + border-radius: 0 0 5px 5px; + padding: 10px 0 20px +} + +.product_detail .info_table .price_block .priceold { + text-decoration: line-through; + margin: 10px 0 +} + +.product_detail .info_table .price_block .price .main { + font-size: 28px; + line-height: 28px; + display: block +} + +.product_detail .info_table .price_block .price .currency,.product_popup_gallery .price .currency { + font-size: 12px; + font-weight: 400 +} + +.product_detail .info_table .price_block_container { + width: 200px; + margin: 0 auto; + text-align: center +} + +.product_detail .info_table .price_block .buy_button .btn { + margin: 0 0 10px; + padding-left: 0; + padding-right: 0; + width: 100%; + text-align: center +} + +.product_detail .info_table .price_block .follow_price { + margin: 0 0 12px; + font-size: 11px; + line-height: 17px +} + +.product_detail .info_table .price_block .follow_price a { + text-decoration: none; + border-bottom: 1px dashed #0156a9 +} + +.product_detail .info_table .price_block .payment_visa { + font: 14px/20px roboto,sans-serif; + color: #666; + margin: 0 0 10px +} + +.product_detail .info_table .price_block .payment_visa .visa { + display: inline-block; + width: 92px; + height: 18px; + background: url(/images/sprites/pb_wm_button.png) 0 0; + margin: 0 0 -3px; + cursor: pointer +} + +.product_detail .info_table .price_block .payment_visa .visa:hover { + background-position: 0 -18px +} + +.product_detail .info_table .price_block .payment_visa .webmoney { + display: inline-block; + width: 30px; + height: 18px; + background: url(/images/sprites/pb_wm_button.png) -92px 0; + margin: 0 0 -3px; + cursor: pointer +} + +.product_detail .info_table .price_block .payment_visa .webmoney:hover { + background-position: -92px -18px +} + +.product_detail .info_table .price_block .wishlike_block { + text-align: center; + height: 28px; + margin: 0 0 15px +} + +.product_detail .info_table .price_block .wishlike_block li,.product_detail .other_colors_block .compare,.product_detail .floating_helper_block .wishlike_block li { + display: inline-block; + float: none; + margin: 0 15px 0 0; + position: relative; + font-size: 11px; + z-index: 1; + white-space: nowrap +} + +.product_detail .info_table .price_block .wishlike_block li .icon,.product_detail .other_colors_block .compare .icon,.product_detail .floating_helper_block .wishlike_block li .icon { + width: 13px; + height: 11px; + background-image: url(/images/sprites/icons_opacity.png); + background-repeat: no-repeat; + position: absolute; + z-index: 1; + left: 0; + top: 2px; + float: left +} + +.product_detail .info_table .price_block .wishlike_block li.like .icon,.product_detail .floating_helper_block .wishlike_block li.like .icon { + background-position: 0 -314px +} + +.product_detail .info_table .price_block .wishlike_block li.like:hover .icon,.product_detail .floating_helper_block .wishlike_block li.like:hover .icon { + background-position: -20px -314px +} + +.product_detail .info_table .price_block .wishlike_block li.compare .icon,.product_detail .other_colors_block .compare .icon,.product_detail .floating_helper_block .wishlike_block li.compare .icon { + background-position: 0 -302px +} + +.product_detail .info_table .price_block .wishlike_block li.compare:hover .icon,.product_detail .other_colors_block .compare:hover .icon,.product_detail .floating_helper_block .wishlike_block li.compare:hover .icon { + background-position: -20px -302px +} + +.product_detail .info_table .price_block .wishlike_block li .compare,.product_detail .info_table .price_block .wishlike_block li .like,.product_detail .other_colors_block .compare a,.product_detail .floating_helper_block .wishlike_block li a { + text-decoration: none; + border-bottom: 1px dashed #0156a9; + color: #0156a9; + margin: 0 0 0 20px +} + +.product_detail .info .rating { + width: 100%; + background: #eee; + margin: 15px auto; + color: #666; + position: relative; + z-index: 1; + white-space: nowrap; + font-size: 12px; + text-align: center; + padding: 10px 0; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.product_detail .info .rating ul,#compare .rating ul { + display: inline-block; + margin: 3px 5px 0 0 +} + +.product_detail .info .rating ul.available li,#compare .rating ul li { + cursor: pointer +} + +.detail_recently_looked ul li .rating ul li.active,.product_detail .info .rating li.active,.product_detail .comments_list_carousel li .comment_block .rating ul li.active,.detail_main_tabs li.comments .rating li.active,.fresh_block .comment_block .rating ul li.active,.catalog_product_list .fast_view .main_info_part .rating ul li.active,.catalog_product_list .fast_view .tabs_part .comments .rating li.active,.old_product_block .product .rating ul li.active,#compare .rating ul li.active { + background: url(/images/sprites/icons_opacity.png) -28px -375px no-repeat +} + +.product_detail .warranty_block { + border: 1px solid #e1e1e1; + border-radius: 5px; + vertical-align: middle +} + +.product_detail .info .warranty_block { + border: none +} + +.product_detail .warranty_block ul li { + margin: 0 0 15px; + position: relative; + z-index: 1; + color: #666; + padding: 0 0 0 40px +} + +.product_detail .warranty_block ul li .title { + font-size: 16px; + line-height: 18px; + font-weight: 700; + color: #333; + font-family: 'roboto',sans-serif; + text-transform: uppercase; + margin: 0 0 5px +} + +.product_detail .warranty_block ul li .descr { + line-height: 16px; + font-size: 12px; + margin: 0 0 5px +} + +.product_detail .warranty_block ul li.delivery .descr { + line-height: 20px +} + +.product_detail .warranty_block ul li .icon { + position: absolute; + z-index: 1; + left: 0; + top: 3px; + background-image: url(/images/sprites/icons.png); + background-repeat: no-repeat +} + +.product_detail .warranty_block ul li.delivery .icon { + width: 23px; + height: 14px; + background-position: 0 -232px +} + +.product_detail .warranty_block ul li.product_back .icon { + width: 20px; + height: 21px; + background-position: 0 -868px; + width: 20px; + height: 21px; + background-position: 0 -868px +} + +.product_detail .warranty_block ul li.warranty .icon { + width: 23px; + height: 26px; + background-position: 0 -890px +} + +.product_detail .warranty_block ul li .black { + color: #333 +} + +.product_detail .warranty_block ul li .bold { + font-weight: 700 +} + +.product_detail .warranty_block ul li .star_info { + color: #ff3c00 +} + +.ajax_link { + color: #0156a9; + border-bottom: 1px dashed; + cursor: pointer; + white-space: nowrap +} + +.product_detail .fast_order_form { + position: relative; + margin: 20px 0 +} + +.product_detail .fast_order_form input[type=tel] { + height: 30px; + border: 3px solid #ffa125; + width: 100%; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.product_detail .fast_order_form input.btn { + height: 36px; + position: absolute; + top: 0; + right: -200px +} + +.product_detail .property_show_tabs,.product_detail .property_show_all { + float: left; + margin: 0 0 10px +} + +.product_detail .tabs .items li,.product_detail .comments_sort li,.product_detail .property_show_tabs li,.product_detail .property_show_all li { + float: left; + white-space: nowrap; + line-height: 34px; + font-size: 15px; + background-color: #f4f4f4; + border-radius: 3px; + margin-right: 2px; + padding: 10px 15px; + list-style-type: none +} + +.product_detail .tabs .items li a,.product_detail .comments_sort li a,.product_detail .property_show_tabs li a,.product_detail .property_show_all li a { + float: left; + padding: 0 20px; + text-decoration: none; + border: none; + background: transparent +} + +.product_detail .property_show_tabs li.active > a,.product_detail .property_show_tabs li.active > a:hover,.product_detail .property_show_tabs li.active > a:focus,.product_detail .property_show_tabs li > a,.product_detail .property_show_tabs li > a:hover,.product_detail .property_show_tabs li > a:focus { + border: none; + background: transparent +} + +.product_detail .tabs .items li a span,.product_detail .info_left_block .tabs .items li a span.text,.product_detail .comments_sort li a span,.product_detail .property_show_tabs li a span,.product_detail .property_show_all li a span { + border-bottom: 1px dashed #145597; + cursor: pointer +} + +.product_detail .tabs .items li.active,.product_detail .comments_sort li.active,.product_detail .property_show_tabs li.active { + box-shadow: 1px 1px 2px #dedede inset +} + +.product_detail .tabs .items li.active a,.product_detail .comments_sort li.active a,.product_detail .property_show_tabs li.active a { + font-weight: 700; + color: #000; + border: none!important +} + +.product_detail .tabs .items li.active a span,.product_detail .comments_sort li.active a span,.product_detail .property_show_tabs li.active a span { + border: none +} + +.product_detail .property_show_tabs,.product_detail .property_show_all { + float: left; + margin: 0 0 10px; + padding: 0; + list-style: none +} + +.product_detail .properties table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + padding: 0; + margin: 0 0 20px +} + +.product_detail .properties table td { + vertical-align: top; + border-collapse: collapse; + border-spacing: 0; + padding: 8px 15px; + margin: 0; + border: 1px solid #eaeaea; + background-color: #fff +} + +.product_detail .properties table .gray td { + background-color: #f8f8f8 +} + +.product_detail .properties table td.name { + color: #333; + border-left: none; + width: 40% +} + +.product_detail .properties .table_title i { + position: absolute; + z-index: 1; + left: 0; + top: 50%; + width: 100%; + height: 1px; + line-height: 1px; + font-size: 1px; + overflow: hidden; + background-color: #e3e3e3 +} + +.product_detail .properties .table_title { + font: 18px/24px roboto,sans-serif; + color: #2b2b2b; + position: relative; + z-index: 1; + text-align: center; + font-weight: 700 +} + +.product_detail .properties .table_title span { + background-color: #fff; + padding: 0 20px; + position: relative; + z-index: 2 +} + +.product_detail .comments .comment_add_form { + margin: 0 0 20px; + padding: 15px 20px; + background-color: #f1f1f1; + border-radius: 5px; + font-family: arial; + font-size: 14px; + line-height: 17px +} + +.product_detail .comments .inpt { + height: auto; + line-height: 18px; + padding: 4px; + border-radius: 4px; + border-top: 1px solid #d9d9d9; + border-left: 1px solid #e4e4e4; + border-right: 1px solid #e4e4e4; + border-bottom: 1px solid #e9e9e9; + background-color: #fff +} + +.product_detail .comments .comment_add_form .title { + font-family: 'roboto',sans-serif; + font-size: 16px; + color: #333; + font-weight: 700 +} + +.product_detail .comments .comment_add_form .field_name { + font-size: 13px; + line-height: 14px; + margin: 0 0 3px; + color: #333; + font-weight: 700 +} + +.product_detail .comments .comment_add_form .inpt input { + height: 40px; + font-size: 16px; + font-family: 'roboto',sans-serif; + font-weight: lighter; + padding: 8px 5px; + display: block; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box +} + +.product_detail .comments .comment_add_form textarea { + height: 76px; + padding: 5px 10px; + font-size: 16px; + font-weight: lighter; + font-family: 'roboto',sans-serif; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + overflow: hidden; + position: relative; + z-index: 2 +} + +.product_detail .comments .comment_add_form .comment_form_table .error_text { + display: inline-block +} + +.product_detail .comments .comment_add_form .comment_form_table .inpt { + width: 240px; + margin: 0 10px 0 0; + display: inline-block +} + +.product_detail .comments .comment_add_form .txtarea { + margin: 0 0 13px +} + +.txtarea textarea { + background: transparent; + border: 0; + width: 100%; + resize: none +} + +.product_detail .comments .comment_add_form .comment_form_table td { + background: transparent; + border: none; + padding: 5px; + margin: 0; + border-collapse: collapse; + border-spacing: 0; + vertical-align: middle +} + +.product_detail .comments .comment_add_form .submit { + text-align: center; + position: relative; + z-index: 1 +} + +.product_detail .comments .comment_add_form .submit .get_answers,.product_detail .comments .comment_add_form .submit .email_4_answers { + position: absolute; + z-index: 1; + top: 0; + left: 50%; + margin: 0 0 0 19% +} + +.product_detail .comments .comment_add_form .submit .email_4_answers { + top: 18px; + display: none +} + +.product_detail .comments .comment_add_form .email_4_answers .inpt input { + height: 28px; + padding: 4px 5px +} + +.product_detail .comments .comment_add_form .submit .get_answers { + top: 15px +} + +.product_detail .comments .comment_add_form .submit .get_answers label { + float: left; + line-height: 14px +} + +.product_detail .comments .comment_add_form .submit .get_answers input { + float: left; + line-height: 14px; + margin: 0 5px 0 0 +} + +.product_detail .comments .comment_add_form .comment_form_table ul { + margin: 0 5px 0 0; + float: left; + width: auto; + height: 16px +} + +.product_detail .comments .comment_add_form .comment_form_table ul li { + cursor: pointer +} + +.product_detail .comments ul.comments_list li .comment_block .rating span { + float: left +} + +.product_detail .comments .comment_add_form .comment_form_table ul li,.product_detail .comments ul.comments_list li .comment_block .rating ul li { + float: left; + width: 16px; + height: 15px; + margin: 0 1px; + background: url(/images/sprites/icons.png) -15px -259px no-repeat +} + +.product_detail .comments .comment_add_form .comment_form_table ul li.active,.product_detail .comments ul.comments_list li .comment_block .rating ul li.active { + background-position: 0 -259px +} + +.tovar td.left { + text-align: center +} + +.tovar .right { + padding: 10px +} + +.tovar .right .title { + font-size: 14px; + line-height: 20px; + padding: 0 0 5px; + color: #4c4c4c +} + +.count_choise .plus,.count_choise .minus,.count_choise .minus-disabled { + float: left; + width: 12px; + height: 12px; + background-image: url(/images/sprites/icons.png); + background-repeat: no-repeat; + cursor: pointer; + margin: 15px 7px 8px 0 +} + +.count_choise .minus { + background-position: -19px -161px +} + +.count_choise .minus-disabled { + background-position: -19px -187px +} + +.count_choise .plus { + background-position: -19px -174px +} + +.count_choise input { + float: left; + width: 40px; + margin: 0 6px 0 0; + font-size: 16px; + font-weight: lighter; + font-family: 'Roboto',sans-serif; + border-radius: 4px; + border: 1px solid #ccc; + height: 40px; + text-align: center; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box +} + +.count_choise .total_summ { + color: green; + font-size: 16px; + line-height: 40px; + white-space: nowrap +} + +.tovar { + width: 100% +} + +.tovar img { + max-height: 120px +} + +.tovar .back_to_shop { + float: left; + width: 160px; + margin: 10px 10px 4px 0; + background: url(/images/sprites/head_phones_icons.png) 10px -116px no-repeat; + text-align: center; + font-size: 14px; + padding-left: 10px +} + +.tovar .back_to_shop a { + color: #2b78c5; + text-decoration: none; + border-bottom: 1px dashed #2b78c5; + padding: 0 0 0 10px +} + +.tovar p.rettext { + margin: 10px 0 0; + font-size: 12px; + color: #565656; + text-align: center; + width: 180px +} + +.gray_part .title { + color: #333; + padding: 0 0 2px; + font-size: 17px +} + +.gray_part .subtitle { + color: #565656; + font-size: 13px; + line-height: 18px; + padding: 0 0 7px +} + +.gray_part .phone-example,.gray_part .phone-error { + color: #999; + padding: 0; + font-size: 13px; + font-style: italic +} + +.product_detail .comments ul.comments_list { + margin: 0 0 10px; + float: left; + width: 100% +} + +.product_detail .comments ul.comments_list .comment_block_1 .comment_add_form.answer_add_form { + display: none +} + +.product_detail .comments ul.comments_list li { + margin: 0 0 10px +} + +.product_detail .comments ul.comments_list li .author,.product_detail .comments_list_carousel li .author { + float: left; + width: 100px; + text-align: center; + padding: 0 10px +} + +.product_detail .comments ul.comments_list li .comment_block,.product_detail .comments_list_carousel li .comment_block { + overflow: hidden; + position: relative; + z-index: 1 +} + +.product_detail .comments ul.comments_list li .comment_block .date { + font-size: 12px; + color: #999; + line-height: 14px; + margin: 0 0 5px +} + +.product_detail .comments ul.comments_list li .comment_block .rating { + background: transparent; + font-size: 13px; + font-weight: 700; + margin: 0 0 15px +} + +.product_detail .comments ul.comments_list li .comment_block .rating ul { + float: left; + margin: 0 24px 0 5px; + width: auto +} + +.product_detail .comments ul.comments_list li .comment_block .comment_block_bg { + background-color: #f1f1f1; + border-radius: 5px; + margin: 0 0 0 22px +} + +.product_detail .comments ul.comments_list li .comment_block .helpful,.product_detail .comments_list_carousel li .comment_block .helpful { + float: right; + width: 90px; + padding: 10px 15px 10px 10px +} + +.product_detail .comments ul.comments_list li .comment_block .comment_content { + overflow: hidden; + padding: 15px 20px; + border-right: 1px solid #d9d9d9; + margin: 0 0 10px +} + +.product_detail .comments ul.comments_list li .comment_block .dignity,.product_detail .comments ul.comments_list li .comment_block .lack { + padding: 0 0 10px 22px; + position: relative; + z-index: 1; + line-height: 25px +} + +.product_detail .comments ul.comments_list li .comment_block .dignity .icon,.product_detail .comments ul.comments_list li .comment_block .lack .icon { + position: absolute; + z-index: 1; + width: 13px; + height: 13px; + left: 0; + top: 6px; + background: url(/images/sprites/icons.png) 0 -246px no-repeat +} + +.product_detail .comments ul.comments_list li .comment_block .lack .icon { + background-position: -13px -246px +} + +.product_detail .comments ul.comments_list li .comment_block .helpful .title,.product_detail .comments_list_carousel li .comment_block .helpful .title { + font-size: 13px; + line-height: 13px; + color: #666; + margin: 0 0 10px; + text-align: center +} + +.product_detail .comments .add_answer { + position: relative; + z-index: 1; + font-size: 15px; + font-weight: 700; + margin-left: 22px; + margin-bottom: 10px; + padding: 0 0 0 28px +} + +.product_detail .comments .add_answer a { + color: #ff3c00; + text-decoration: none; + border-bottom: 1px dashed #ff3c00 +} + +.product_detail .comments .add_answer .icon { + position: absolute; + z-index: 1; + left: 0; + top: 4px; + width: 22px; + height: 14px; + background: url(/images/sprites/icons.png) 0 -327px no-repeat +} + +.product_detail .comments ul.comments_list li .comment_block .helpful .yes,.product_detail .comments ul.comments_list li .comment_block .helpful .no,.product_detail .comments_list_carousel li .comment_block .helpful .yes,.product_detail .comments_list_carousel li .comment_block .helpful .no { + float: left; + width: 30px; + text-align: center +} + +.product_detail .comments ul.comments_list li .comment_block .helpful .yes .icon,.product_detail .comments ul.comments_list li .comment_block .helpful .no .icon,.product_detail .comments_list_carousel li .comment_block .helpful .yes .icon,.product_detail .comments_list_carousel li .comment_block .helpful .no .icon { + display: block; + width: 20px; + height: 19px; + margin: -2px auto 7px; + background: url(/images/sprites/icons.png) 0 -274px no-repeat +} + +.product_detail .comments ul.comments_list li .comment_block .helpful .no .icon,.product_detail .comments_list_carousel li .comment_block .helpful .no .icon { + background-position: 0 -293px; + margin: 2px auto 3px +} + +.product_detail .comments ul.comments_list li .comment_block .helpful .count,.product_detail .comments_list_carousel li .comment_block .helpful .count { + color: #666; + font-size: 16px +} + +.infopage { + max-width: 990px; + margin: 0 auto +} + +.modal { + text-align: center; + z-index: 99999 +} + +.modal:before { + display: inline-block; + vertical-align: middle; + content: " "; + height: 100% +} + +.modal-dialog { + display: inline-block; + text-align: left; + vertical-align: middle +} + +.modal-dialog.auth { + width: 360px +} + +.modal-dialog.wishlist { + width: 400px +} + +.modal-dialog.buy-product { + width: 460px +} + +.modal-backdrop { + background-color: #fff +} + +.modal-content { + border: 3px solid #2172c4; + -webkit-box-shadow: 5px 5px 0 rgba(0,0,0,0.2); + box-shadow: 5px 5px 0 rgba(0,0,0,0.2) +} + +.modal-header { + padding: 15px 15px 0; + border-bottom: 0 +} + +.modal-header h4 { + font-family: 'Roboto',sans-serif; + margin-top: 20px; + font-size: 26px; + font-weight: lighter +} + +.modal-header .close { + margin-top: -10px; + margin-right: -10px; + padding: 0 5px 2px; + background: #6c6964!important; + color: #d1d1d1; + -webkit-border-radius: 100%; + -moz-border-radius: 100%; + border-radius: 100% +} + +.modal-body form label { + font-weight: 300; + font-size: 18px +} + +.modal-footer { + padding: 15px; + text-align: left; + border-top: 0 +} + +.modal-body input,.modal-body textarea,.modal-body select { + background-color: #eaeaea; + border-color: #dbdbdb +} + +.modal-body input:-webkit-autofill,.modal-body textarea:-webkit-autofill,.modal-body select:-webkit-autofill { + -webkit-text-fill-color: $ textColor; + -webkit-box-shadow: 0 0 0 1000px #eaeaea inset; + background-color: #eaeaea +} + +.form-control { + height: 40px +} + +.modal-body ul.links { + display: inline-block +} + +.modal-body button,.modal-body ul.links { + display: block; + float: left +} + +.modal-body button,.modal-body a.btn.btn-gray { + padding: 10px 20px; + margin-right: 10px +} + +.modal-body a.btn.btn-gray { + border-color: #ccc; + background: #ccc; + color: #666 +} + +.modal-body ul.links a { + text-decoration: none; + color: #0c559d; + border-bottom: 1px dashed #0c559d +} + +.modal-body ul.links li { + padding: 3px 0 0 +} + +.modal-dialog.buy-product .modal-footer { + background-color: #f5f5f5; + padding: 10px 30px 20px +} + +.modal-dialog .example { + float: left; + width: 100%; + font-size: 11px; + font-style: italic; + color: #999; + padding: 2px 0 0; + margin: -10px 0 10px +} + +.o-social-button { + background: url(/images/sprites/order-social-auth-sprite.png) no-repeat scroll 0 0 transparent; + cursor: pointer; + float: left; + height: 32px; + width: 32px; + margin: 0 10px 0 0 +} + +.o-sb-vk { + background-position: 0 0 +} + +.o-sb-fb { + background-position: -64px 0 +} + +.o-sb-go { + background-position: -96px 0 +} + +.o-sb-ya { + background-position: -128px 0 +} + +.share { + width: 100%; + float: left; + border-top: 1px solid #000 +} + +.share .product_item { + float: left; + margin: 0 10px 20px 0 +} + +.share .share_title { + width: 100%; + float: left; + font-size: 40px; + color: red; + line-height: 50px; + margin: 20px 0 10px +} + +.time_left,.products_left { + float: left; + width: 50%; + text-align: center +} + +.products_left .products_title,.time_left .time_title { + font-weight: 700; + color: #333 +} + +.time_note { + width: 100%; + font-size: 40px; + font-weight: 700; + line-height: 50px; + margin-bottom: 10px +} + +.count_days,.count_hours { + float: left; + width: 40%; + text-align: center +} + +.time_left_datails { + float: left; + width: 100% +} + +.time_left_datails .days { + float: left; + width: 40%; + text-align: center +} + +.time_left_datails .hours { + float: left; + width: 40%; + text-align: center +} + +.products_num { + width: 100%; + font-size: 40px; + font-weight: 700; + line-height: 50px +} + +.products_num_datails { + text-align: center +} + +.share_readmore { + margin-top: 30px; + float: right; + color: #0156a9 +} + +#bottom { + position: fixed; + width: 100%; + max-width: 1400px; + min-width: 940px; + z-index: 1151; + bottom: 0; + display: block; + height: 0; + margin-left: -1px +} + +.bkp { + bottom: 0; + display: block; + width: 168px; + height: 33px; + background-image: url(/images/footer/nbkp2.png); + z-index: 1250; + float: left; + position: relative; + top: -33px; + left: 25% +} + +.bkp .b_cat { + display: block; + float: left; + margin-top: 10px; + margin-left: 12px; + width: 68px; + height: 16px +} + +.bkp .b_price { + display: block; + float: left; + margin-top: 10px; + margin-left: 13px; + width: 54px; + height: 16px +} + +.bkp .b_cat:hover,.bkp .bactive_cat,.bkp .b_price:hover,.bkp .bactive_price { + height: 14px; + border-bottom: solid 2px #fff +} + +.bgoogle { + bottom: 0; + display: block; + width: 113px; + height: 32px; + background-image: url(/images/footer/bgoogle.png); + z-index: 1250; + float: left; + position: relative; + top: -32px; + margin-left: 250px; + left: 25% +} + +.bvk { + bottom: 0; + display: block; + width: 113px; + height: 32px; + background-image: url(/images/footer/bvk.png); + z-index: 1250; + float: left; + position: relative; + top: -32px; + margin-left: 0; + left: 25% +} + +.bface { + bottom: 0; + display: block; + width: 113px; + height: 32px; + background-image: url(/images/footer/bfacebook.png); + z-index: 1250; + float: left; + position: relative; + top: -32px; + margin-left: 0; + left: 25% +} + +.bact { + bottom: 0; + display: block; + width: 75px; + height: 33px; + background-image: url(/images/footer/bact2.png); + z-index: 1250; + float: right; + position: relative; + top: -33px; + right: 150px +} + +.bsales { + bottom: 0; + display: block; + width: 129px; + background-image: url(/images/footer/bsalesn2.png); + z-index: 1250; + float: right; + position: relative; + top: -33px; + right: 150px; + height: 120px; + cursor: pointer +} + +.bsales #bs_box { + width: 129px; + height: 113px; + background-image: url(/images/footer/bsalesbox.png); + position: relative; + opacity: 0; + margin-top: -113px +} + +.bsales .hsale { + display: block; + width: 148px; + height: 33px; + margin-bottom: 10px +} + +.bsales a { + display: block; + width: 64px; + height: 57px; + padding-top: 18px; + float: left; + text-align: center; + font-size: 16px; + font-weight: 700; + color: #fff +} + +.form-small { + margin: 20px auto 50px; + width: 500px +} + +.form-small label { + font-size: 14px; + padding-right: 5px; + font-weight: 400 +} + +.form-small p { + font-size: 13px +} + +.vertical .carousel-inner { + height: 100% +} + +.carousel.vertical .item { + -webkit-transition: .6s ease-in-out top; + -moz-transition: .6s ease-in-out top; + -ms-transition: .6s ease-in-out top; + -o-transition: .6s ease-in-out top; + transition: .6s ease-in-out top +} + +.carousel.vertical .active { + top: 0 +} + +.carousel.vertical .next { + top: 400px +} + +.carousel.vertical .prev { + top: -400px +} + +.carousel.vertical .next.left,.carousel.vertical .prev.right { + top: 0 +} + +.carousel.vertical .active.left { + top: -400px +} + +.carousel.vertical .active.right { + top: 400px +} + +.carousel.vertical .item { + left: 0 +} + +.carousel.vertical .carousel-control { + background: none; + width: 34px; + height: 55px +} + +.carousel.vertical .carousel-control-nav.right,.carousel.vertical .carousel-control-nav.left { + position: absolute; + z-index: 1; + width: 34px; + height: 34px; + background: url(/images/sprites/arrs_carousel.png); + background-repeat: no-repeat; + cursor: pointer; + right: 0 +} + +.carousel.vertical .carousel-control-nav.left { + background-position: 0 -305px +} + +.carousel.vertical .carousel-control-nav.right { + background-position: 0 -338px +} + +.carousel.vertical .carousel-control.right { + left: auto; + right: 0; + bottom: 10px; + top: inherit +} + +.carousel.vertical .carousel-control.left { + left: auto; + right: 0; + top: -70px; + background: none +} + +.cats_table td { + text-align: center +} + +.cats_table td div { + margin: 20px 0 +} + +.cats_table .item img { + display: block; + margin: 0 auto; + text-align: center; + border: 1px solid #ccc +} + +.cats_table table { + margin: 0 auto +} + +.actions_block { + padding: 20px 50px +} + +.action_block { + width: 100%; + text-align: left; + border-top: solid 1px #000; + padding: 10px 10px 15px; + float: left +} + +.action_block:last-child { + border-bottom: solid 1px #000; + margin-bottom: 40px +} + +.action_block .l1 { + text-align: left; + font-size: 16px +} + +.action_block .l2 { + line-height: 32px; + padding-top: 10px; + padding-left: 8px; + color: #fe0000; + font-size: 32px; + font-weight: 700; + width: 300px; + float: left +} + +.action_block .limg { + width: 700px; + height: 200px; + float: left +} + +.action_block .l3 { + width: 316px; + height: 122px; + background-image: url(/images/actioned/abg.png); + float: left; + line-height: 35px +} + +.action_block .l3 .l3_1 { + float: left; + position: relative; + left: 17px; + top: 43px; + font-size: 30px; + font-weight: 700; + width: 50px; + text-align: center +} + +.action_block .l3 .l3_2 { + float: left; + position: relative; + left: 23px; + top: 43px; + font-size: 30px; + font-weight: 700; + width: 50px; + text-align: center +} + +.action_block .l3 .l3_3 { + float: left; + position: relative; + left: 84px; + top: 43px; + font-size: 30px; + font-weight: 700; + width: 100px; + text-align: center +} + +.action_block .l4 { + width: 300px; + float: left; + text-align: right; + padding-top: 5px +} + +.action_block .l4 a { + color: #0066bd; + font-size: 12px; + text-decoration: underline +} + +#personal_vertical_tabs { + float: left; + width: 100%; + background: url(/images/bg.png) repeat; + border-radius: 10px; + position: relative +} + +.tabs-left.personal { + background: #fff; + border: none; + margin: 0; + padding-top: 50px +} + +#personal_vertical_tabs .tab-content { + background: #fff; + margin-left: 40px; + border-radius: 10px; + padding: 20px 10px; + height: 520px +} + +.tabs-left.personal li a { + border: none; + margin-bottom: 20px +} + +.tabs-left.personal li.active a { + border: none +} + +.personal li a .personal_text { + margin: 0 auto; + display: block; + text-align: center +} + +.personal li a .icon { + display: block; + margin: 0 auto; + z-index: 1; + background-image: url(/images/sprites/personal_main_icons.png); + background-repeat: no-repeat; + width: 24px; + height: 34px; + background-position: -5px 0 +} + +.personal li a:hover { + background: transparent +} + +.personal li.personal_data a .icon { + width: 24px; + height: 34px; + background-position: -5px 0 +} + +.personal li.personal_data.active a .icon,.personal li.personal_data:hover a .icon { + background-position: -45px 0 +} + +.personal li.discount_card a .icon { + width: 33px; + height: 31px; + background-position: -1px -57px +} + +.personal li.active.discount_card a .icon,.personal li.discount_card:hover a .icon { + background-position: -41px -57px +} + +.personal li.delivery_address a .icon { + width: 32px; + height: 32px; + background-position: -2px -112px +} + +.personal li.delivery_address a:hover .icon,.personal li.delivery_address.active .icon { + background-position: -42px -112px +} + +.personal li.wishlist a .icon { + width: 14px; + height: 29px; + background-position: -10px -167px +} + +.personal li.wishlist a:hover .icon,.personal li.active.wishlist a .icon { + background-position: -50px -167px +} + +.personal li.subscribes a .icon { + width: 29px; + height: 29px; + background-position: -3px -270px +} + +.personal li.subscribes a:hover .icon,.personal li.active.subscribes a .icon { + background-position: -43px -270px +} + +.personal li.orders a .icon { + width: 33px; + height: 29px; + background-position: -1px -220px +} + +.personal li.orders a:hover .icon,.personal li.active.orders a .icon { + background-position: -41px -220px +} + +.lk_info_form { + width: 440px; + margin: 0 auto; + empty-cells: show +} + +.lk_info_form td { + padding: 5px +} + +.lk_info_form td.param { + color: #bababa; + font-size: 14px; + text-align: right; + width: 140px; + font-family: 'roboto',sans-serif +} + +.lk_info_form td.value { + font-size: 14px; + color: #383838; + line-height: 34px +} + +.lk_info_form td.spacer { + width: 20px +} + +.lk_info_form td.value span { + right: 15px!important; + top: 12px!important; + display: none +} + +.lk_info_form td.value .user_email { + font-weight: 700; + display: inline-block; + line-height: 57px +} + +.error_text { + color: #f60; + font-size: 13px; + font-weight: 700; + line-height: 14px; + display: none +} + +.lk_info_form td.value .inpt { + display: block; + width: 100%; + height: 34px; + line-height: 20px; + padding: 7px; + font-size: 14px; + color: #383838; + box-sizing: border-box; + box-shadow: none; + font-family: arial +} + +.lk_info_form td.value .inpt,.lk_discount .inpt { + border-color: #d2d2d2; + background: #f6f6f6; + transition: all .5s; + -moz-transition: all .5s; + -webkit-transition: all .5s +} + +.lk_info_form td.value .btn { + width: 100%; + height: 40px; + box-sizing: border-box +} + +.only_current_email { + font-size: 13px; + color: #898989; + margin: 0 0 20px +} + +.only_current_email span { + color: #000 +} + +.info_privacy { + background: #f6f6f6; + padding: 12px 12px 12px 45px; + font-size: 13px; + color: #acacac; + font-style: italic; + position: relative; + z-index: 1; + margin: 0 0 20px; + border-radius: 4px +} + +.current_data { + padding: 40px 20px 10px +} + +.current_data h4 { + color: #125698 +} + +.current_data p { + padding: 0; + margin: 0 0 10px +} + +.current_data .logout { + position: absolute; + bottom: 20px; + right: 50px; + background: #fff; + color: #999; + border: 1px solid #ccc; + padding: 10px 20px +} + +.compare-btns .btn { + color: #000; + font-weight: 300; + background: transparent; + border: none; + font-size: 14px; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none +} + +#compare td { + padding: 5px 10px +} + +#compare th { + padding: 5px 10px +} + +#compare th:first-letter { + text-transform: uppercase +} + +#compare tr:hover { + background: rgba(255,255,255,0.8) +} + +#compare tr:first-child:hover { + background: transparent!important +} + +#compare .photo { + display: table-cell; + width: 156px; + height: 206px; + vertical-align: middle; + text-align: center; + position: relative +} + +#compare img { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +#compare .product_compare_price { + font-size: 13px; + border-radius: 4px; + padding: 7px 7px 5px; + vertical-align: middle; + margin-right: .5em; + white-space: nowrap +} + +#compare .product_compare_price .spanUAH { + font-size: 20px +} + +.td_compare .remove_product_compare { + padding: 2px 5px; + position: absolute; + top: 5px; + right: 5px; + background: #fff; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.collection { + padding: 0 25px +} + +.collection .catalog_product_list.view_table .catalog_item { + width: 25%; + height: 330px +} + +.collection .catalog_product_list.view_table .catalog_item .wrapper { + min-height: 318px; + height: 318px +} + +.collection .catalog_product_list.view_table .catalog_item .title { + border-top: 1px dotted #ccc; + text-align: right +} + +.collection .catalog_product_list.view_table .catalog_item .title a { + color: #0156a9; + text-decoration: underline; + font-size: 14px +} + +.diller table tr td { + padding-left: 10px +} + +.red { + color: #ff0004 +} + +h1.title { + line-height: 27px +} + +.spritecat { + background-image: url(/images/sprites/cat_spritesheet.png); + background-repeat: no-repeat; + display: block; + margin: auto +} + +.spritecat-_blank { + width: 100px; + height: 110px; + background-position: -5px -5px +} + +.spritecat-abajury_dlya_nastolnyh_lamp { + width: 100px; + height: 110px; + background-position: -115px -5px +} + +.spritecat-akcionnye { + width: 100px; + height: 110px; + background-position: -225px -5px +} + +.spritecat-bra { + width: 100px; + height: 110px; + background-position: -335px -5px +} + +.spritecat-bra_1 { + width: 100px; + height: 110px; + background-position: -445px -5px +} + +.spritecat-bra_2 { + width: 100px; + height: 110px; + background-position: -555px -5px +} + +.spritecat-bra_s_datchikom { + width: 100px; + height: 110px; + background-position: -665px -5px +} + +.spritecat-detskie { + width: 100px; + height: 110px; + background-position: -775px -5px +} + +.spritecat-detskie1 { + width: 100px; + height: 110px; + background-position: -885px -5px +} + +.spritecat-detskie2 { + width: 100px; + height: 110px; + background-position: -5px -125px +} + +.spritecat-detskie3 { + width: 100px; + height: 110px; + background-position: -115px -125px +} + +.spritecat-dlya_bra { + width: 100px; + height: 110px; + background-position: -225px -125px +} + +.spritecat-dlya_kuhon { + width: 100px; + height: 110px; + background-position: -335px -125px +} + +.spritecat-dlya_lyustr { + width: 100px; + height: 110px; + background-position: -445px -125px +} + +.spritecat-dlya_vannyh { + width: 100px; + height: 110px; + background-position: -555px -125px +} + +.spritecat-dlya_vannyh1 { + width: 100px; + height: 110px; + background-position: -665px -125px +} + +.spritecat-dlya_vannyh2 { + width: 100px; + height: 110px; + background-position: -775px -125px +} + +.spritecat-galogennye1 { + width: 100px; + height: 110px; + background-position: -885px -125px +} + +.spritecat-klassicheskie_4 { + width: 100px; + height: 110px; + background-position: -5px -245px +} + +.spritecat-klassicheskie_5 { + width: 100px; + height: 110px; + background-position: -115px -245px +} + +.spritecat-klassicheskie_6 { + width: 100px; + height: 110px; + background-position: -225px -245px +} + +.spritecat-kruglye_1 { + width: 100px; + height: 110px; + background-position: -335px -245px +} + +.spritecat-kvadratnye_1 { + width: 100px; + height: 110px; + background-position: -445px -245px +} + +.spritecat-lampochki1 { + width: 100px; + height: 110px; + background-position: -555px -245px +} + +.spritecat-lampy_energosberegayuschie { + width: 100px; + height: 110px; + background-position: -665px -245px +} + +.spritecat-lampy_nakalivaniya { + width: 100px; + height: 110px; + background-position: -775px -245px +} + +.spritecat-lampy_specialnye { + width: 100px; + height: 110px; + background-position: -885px -245px +} + +.spritecat-lyuminiscentnye1 { + width: 100px; + height: 110px; + background-position: -5px -365px +} + +.spritecat-lyustry_1 { + width: 100px; + height: 110px; + background-position: -115px -365px +} + +.spritecat-lyustry_2 { + width: 100px; + height: 110px; + background-position: -225px -365px +} + +.spritecat-na_chetyre_lampy { + width: 100px; + height: 110px; + background-position: -335px -365px +} + +.spritecat-na_dve_lampy { + width: 100px; + height: 110px; + background-position: -445px -365px +} + +.spritecat-na_odnu_lampu { + width: 100px; + height: 110px; + background-position: -555px -365px +} + +.spritecat-na_pyat_i_bolee { + width: 100px; + height: 110px; + background-position: -665px -365px +} + +.spritecat-na_tri_lampy { + width: 100px; + height: 110px; + background-position: -775px -365px +} + +.spritecat-nabornaya_sistema { + width: 100px; + height: 110px; + background-position: -885px -365px +} + +.spritecat-nakladnye_3 { + width: 100px; + height: 110px; + background-position: -5px -485px +} + +.spritecat-nastenno_potolochnye_1 { + width: 100px; + height: 110px; + background-position: -115px -485px +} + +.spritecat-nastolnye_lampy_1 { + width: 100px; + height: 110px; + background-position: -225px -485px +} + +.spritecat-ofisnye_3 { + width: 100px; + height: 110px; + background-position: -335px -485px +} + +.spritecat-perenosnye { + width: 100px; + height: 110px; + background-position: -445px -485px +} + +.spritecat-podsvetki { + width: 100px; + height: 110px; + background-position: -555px -485px +} + +.spritecat-podsvetki1 { + width: 100px; + height: 110px; + background-position: -665px -485px +} + +.spritecat-podvesnye_5 { + width: 100px; + height: 110px; + background-position: -775px -485px +} + +.spritecat-podvesnye_6 { + width: 100px; + height: 110px; + background-position: -885px -485px +} + +.spritecat-potolochnye_2 { + width: 100px; + height: 110px; + background-position: -5px -605px +} + +.spritecat-potolochnye_3 { + width: 100px; + height: 110px; + background-position: -115px -605px +} + +.spritecat-potolochnye_4 { + width: 100px; + height: 110px; + background-position: -225px -605px +} + +.spritecat-projektor { + width: 100px; + height: 110px; + background-position: -335px -605px +} + +.spritecat-rozetka { + width: 100px; + height: 110px; + background-position: -445px -605px +} + +.spritecat-s_abajurom { + width: 100px; + height: 110px; + background-position: -555px -605px +} + +.spritecat-s_abajurom_1 { + width: 100px; + height: 110px; + background-position: -665px -605px +} + +.spritecat-s_abajurom_2 { + width: 100px; + height: 110px; + background-position: -775px -605px +} + +.spritecat-soedenitelnyy_kabel { + width: 100px; + height: 110px; + background-position: -885px -605px +} + +.spritecat-sovremennye_3 { + width: 100px; + height: 110px; + background-position: -5px -725px +} + +.spritecat-sovremennye_4 { + width: 100px; + height: 110px; + background-position: -115px -725px +} + +.spritecat-sovremennye_5 { + width: 100px; + height: 110px; + background-position: -225px -725px +} + +.spritecat-stolbiki_bolshie { + width: 100px; + height: 110px; + background-position: -335px -725px +} + +.spritecat-stolbiki_malenkie { + width: 100px; + height: 110px; + background-position: -445px -725px +} + +.spritecat-stolbiki_srednie { + width: 100px; + height: 110px; + background-position: -555px -725px +} + +.spritecat-svechi { + width: 100px; + height: 110px; + background-position: -665px -725px +} + +.spritecat-svechi_1 { + width: 100px; + height: 110px; + background-position: -775px -725px +} + +.spritecat-svetilniki_dlya_kuhni { + width: 100px; + height: 110px; + background-position: -885px -725px +} + +.spritecat-svetodiodnye1 { + width: 100px; + height: 110px; + background-position: -5px -845px +} + +.spritecat-test { + width: 100px; + height: 110px; + background-position: -115px -845px +} + +.spritecat-torsheryklassicheskie { + width: 100px; + height: 110px; + background-position: -225px -845px +} + +.spritecat-torsherys_lampoy_dlya_chteniya { + width: 100px; + height: 110px; + background-position: -335px -845px +} + +.spritecat-torsherysovremennye { + width: 100px; + height: 110px; + background-position: -445px -845px +} + +.spritecat-ulichnye1 { + width: 100px; + height: 110px; + background-position: -555px -845px +} + +.spritecat-ulichnye2 { + width: 100px; + height: 110px; + background-position: -665px -845px +} + +.spritecat-ulichnye3 { + width: 100px; + height: 110px; + background-position: -775px -845px +} + +.spritecat-vreznye_1 { + width: 100px; + height: 110px; + background-position: -885px -845px +} + +.spritecat-vreznye_2 { + width: 100px; + height: 110px; + background-position: -995px -5px +} + +.spritecat-vreznye_3 { + width: 100px; + height: 110px; + background-position: -995px -125px +} + +.spritecat-vse { + width: 100px; + height: 110px; + background-position: -995px -245px +} + +.spritecat-vstraivaemye_v_grunt { + width: 100px; + height: 110px; + background-position: -995px -365px +} + +.spritebrand { + background-image: url(/images/new_img/brends/img-0.png); + background-repeat: no-repeat; + margin: auto; + display: block +} + +.spritebrand:hover { + background-image: url(/images/sprites/brand_spritesheet.png) +} + +.spritebrand-elstead { + width: 107px; + height: 54px; + background-position: -5px -5px +} + +.spritebrand-eseo { + width: 85px; + height: 54px; + background-position: -122px -5px +} + +.spritebrand-feiss { + width: 100px; + height: 54px; + background-position: -15px -69px +} + +.spritebrand-flambeau { + width: 125px; + height: 54px; + background-position: -5px -133px +} + +.spritebrand-hinkley { + width: 125px; + height: 54px; + background-position: -5px -197px +} + +.spritebrand-light { + width: 63px; + height: 54px; + background-position: -140px -69px +} + +.spritebrand-lirio { + width: 87px; + height: 54px; + background-position: -140px -133px +} + +.spritebrand-massive { + width: 71px; + height: 54px; + background-position: -140px -197px +} + +.spritebrand-philips { + width: 79px; + height: 54px; + background-position: -217px -5px +} + +.spritebrand-quozel { + width: 125px; + height: 54px; + background-position: -213px -69px +} + +.cabinet_wrap { + display: flex; + padding-bottom: 20px; + margin-top: 15px +} + +.cabinet_menu { + padding-right: 35px; + border-right: 3px solid #acc6e6; + margin-right: 35px; + margin-bottom: 35px +} + +.cabinet_menu .cab_01,.cabinet_menu .link { + margin: 3px 0 +} + +.blog-show-img.float-left { + float: left; + padding: 0 30px 30px 0 +} + +.btn.btn-cart { + height: 54px; + outline: none +} + +.header-new-img { + width: 100%; + max-width: 100% +} + +.header_tb { + height: 108px; + border-bottom: 1px solid #e4e4e4 +} + +.new_search form { + width: 100%; + float: left +} + +.new_search form .form-control { + width: 100%; + float: left; + height: 36px; + outline: none!important; + border-radius: 0!important; + border: 1px solid #a7acb0 +} + +.new_search form .form-control:focus { + box-shadow: 1px 2px 2px 0 rgba(215,215,215,0.75) inset; + transition: .1s; + -webkit-transition: .1s +} + +.new-btn-search { + position: absolute; + top: 3px; + right: 1px; + width: 34px; + height: 32px; + background: #fff url(../images/new_img/ico/ico-5.png) 50% 50% no-repeat; + z-index: 9; + border: 0!important; + outline: none!important +} + +.basket_btn { + text-decoration: none; + padding-right: 15px; + display: block; + width: 100% +} + +.price_ { + color: #0f6fc7; + font-size: 18px; + float: right; + height: 38px; + line-height: 38px; + margin-bottom: 0 +} + +.basket_btn:hover { + text-decoration: none!important +} + +.basket_btn:hover .price_ { + text-decoration: underline!important +} + +.basket_btn div,.price-basket a { + float: right; + width: 38px; + height: 38px; + background: #0f6fc7 url(../images/new_img/ico/ico-6.png) 50% 50% no-repeat; + border-radius: 100%; + position: relative; + margin-right: 15px +} + +.basket_btn div span { + position: absolute; + top: -7px; + right: -4px; + background: #e80000; + color: #fff; + min-width: 20px; + height: 20px; + padding: 0 3px; + line-height: 20px; + text-align: center; + border-radius: 100%; + font-size: 13px +} + +.tb_phones { + margin: 0; + width: 100% +} + +.tb_phones img { + vertical-align: middle; + margin-right: 10px +} + +.header_phones { + font-size: 18px; + color: #4b4b4b; + margin: 0 +} + +.header_phones span { + color: #a7acb0 +} + +.tb_phones tr { + width: 100% +} + +.tb_phones > tr > td { + width: 50%; + text-align: center; + vertical-align: middle +} + +.tb_phones tr td { + vertical-align: middle; + height: 26px +} + +.header_callback { + font-size: 13px; + color: #0f6fc7 +} + +.header_callback:hover { + color: #0f6fc7 +} + +@media (max-width: 1000px) { + #top-nav-wrapper { + position:relative + } + + header { + margin-top: 0 + } + + .bigSlidertabs.fixed { + position: relative!important; + bottom: 0 + } + + .product_detail .img_part .position.fixed { + position: relative!important; + width: 100%; + padding: 0 + } + + .up_arr { + display: none!important + } + + .product_detail .img_part .floating_helper_block .price { + margin-left: 5px!important + } + + .product_detail .img_part .floating_helper_block .priceold { + padding-left: 0 + } + + .shares { + display: none + } + + .spritebrand-flambeau { + max-width: 100px + } +} + +@media (max-width: 1199px) { + #top-nav span.phone1,#top-nav span.phone2 { + font-size:14px; + padding: 16px 10px 16px 0 + } + + #top-nav .top-menu li a { + font-size: 11px; + padding: 18px 0 18px 5px + } + + ul.parameters-list li { + padding: 0 15px + } + + ul.parameters-list li a { + font-size: 13px + } + + #header_feedback { + display: none + } + + #header_search { + margin-left: 30px + } + + #top-cart { + top: 0 + } + + #top-nav span.phone1,#top-nav span.phone2 { + font-size: 14px + } + + #top-nav .phones { + padding: 0 + } + + #top-nav .container { + position: relative + } + + #logo { + padding: 0 10px + } + + #brand_bar ul li img { + max-width: 75px + } +} + +@media only screen and (min-width: 1200px) and (max-width: 1299px) { + #logo { + float:left; + padding: 0 10px + } + + #header_search { + max-width: 360px + } + + #header_search p { + font-size: 12px; + margin: 0 0 5px + } + + .popular_search_title { + padding: 0 10px 0 50px + } + + #header_feedback form { + padding-left: 5px + } + + #header_feedback form button { + font-size: 12px; + padding: 6px 10px + } + + #header_feedback { + padding: 20px 10px 5px 20px + } +} + +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + #top-nav .phones { + padding:0 20px 0 0 + } +} + +@media (min-width: 1400px) { + #top-nav .phones { + padding:0 40px 0 5px + } + + #header_search { + max-width: 465px + } + + #header_feedback form button { + font-size: 14px + } +} + +#myCallback .required label:before { + display: none +} + +@media (max-width: 1200px) { + .header_phones { + font-size:15px + } + + #brand_bar ul { + display: block; + margin: 0 + } + + #brand_bar ul li { + display: block; + float: left; + padding: 0; + margin-left: -3px + } + + .box-studio-wr p { + font-size: 11px + } + + footer .soc li { + margin-left: 14px + } + + .title-sku { + float: left; + width: 100% + } + + .comments-start { + width: 563px!important + } + + .input_bl input,.input_bl textarea,.answer-form textarea { + width: 172px!important + } + + .area_bl textarea,.answer-form textarea { + width: 413px!important + } + + .fixed-events { + transform: rotate(-90deg); + -webkit-transform: rotate(-90deg); + right: -53px + } + + .fixed-sale { + transform: rotate(90deg); + -webkit-transform: rotate(90deg); + left: -53px + } + + .fixed-sale a { + transform: rotate(-180deg); + -webkit-transform: rotate(-180deg) + } + + .btn-fixeds { + bottom: 53px + } +} + +.flip-clock-wrapper ul { + width: 40px; + height: 60px +} + +.flip-clock-wrapper ul li { + line-height: 60px +} + +.flip-clock-wrapper ul li a div div.inn { + font-size: 50px +} + +.flip-clock-dot.top { + top: 40px +} + +.flip-clock-dot.bottom { + bottom: 40px +} + +.flip-clock-divider { + height: 70px +} + +.events { + margin-top: 20px; + margin-bottom: 20px +} + +.events img { + display: block; + margin: 0 auto +} + +.news_item { + position: relative +} + +.clock_style { + max-width: 1497px; + margin: 0 auto; + padding-top: 25px; + padding-left: 10px; +} +.clock_centered, .arrows_centered_parent{ + width: 100%; + position: absolute; + top: 0; +} +.clock_style_abs { + position: absolute; + top: 35px; + left: 10px; +} +#prev_slide, #next_slide{ + top: 200px!important; +} +.clock_style_abs.top70{top:70px;} +.arrows_slide_centered{ + position:relative; + max-width:1497px; + margin: 0 auto; + height: 100%; +} +.required label:before { + display: block; + content: "*"; + color: #d40000; + position: absolute; + top: 0; + right: -7px +} + +.option_image_block { + height: 110px +} + +.owl-item .catalog_item { + float: none!important; + width: auto!important +} + + html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100% +} + +article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary { +display: block +} + +audio,canvas,progress,video { +display: inline-block; +vertical-align: baseline +} + +audio:not([controls]) { +display: none; +height: 0 +} + +[hidden],template { +display: none +} + +a { +background-color: transparent +} + +a:active,a:hover { +outline: 0 +} + +abbr[title] { +border-bottom: 1px dotted +} + +b,strong { +font-weight: 700 +} + +dfn { +font-style: italic +} + +h1 { +font-size: 2em; +margin: .67em 0 +} + +mark { +background: #ff0; +color: #000 +} + +small { +font-size: 80% +} + +sub,sup { +font-size: 75%; +line-height: 0; +position: relative; +vertical-align: baseline +} + +sup { +top: -.5em +} + +sub { +bottom: -.25em +} + +img { +border: 0 +} + +svg:not(:root) { +overflow: hidden +} + +figure { +margin: 1em 40px +} + +hr { +box-sizing: content-box; +height: 0 +} + +pre { +overflow: auto +} + +code,kbd,pre,samp { +font-family: monospace,monospace; +font-size: 1em +} + +button,input,optgroup,select,textarea { +color: inherit; +font: inherit; +margin: 0 +} + +button { +overflow: visible +} + +button,select { +text-transform: none +} + +button,html input[type="button"],input[type="reset"],input[type="submit"] { +-webkit-appearance: button; +cursor: pointer +} + +button[disabled],html input[disabled] { +cursor: default +} + +button::-moz-focus-inner,input::-moz-focus-inner { +border: 0; +padding: 0 +} + +input { +line-height: normal +} + +input[type="checkbox"],input[type="radio"] { +box-sizing: border-box; +padding: 0 +} + +input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button { +height: auto +} + +input[type="search"] { +-webkit-appearance: textfield; +box-sizing: content-box +} + +input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration { +-webkit-appearance: none +} + +fieldset { +border: 1px solid silver; +margin: 0 2px; +padding: .35em .625em .75em +} + +legend { +border: 0; +padding: 0 +} + +textarea { +overflow: auto +} + +optgroup { +font-weight: 700 +} + +table { +border-collapse: collapse; +border-spacing: 0 +} + +td,th { +padding: 0 +} + +html { +font-family: sans-serif; +-ms-text-size-adjust: 100%; +-webkit-text-size-adjust: 100% +} + +article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary { +display: block +} + +audio,canvas,progress,video { +display: inline-block; +vertical-align: baseline +} + +audio:not([controls]) { +display: none; +height: 0 +} + +[hidden],template { +display: none +} + +a { +background-color: transparent +} + +a:active,a:hover { +outline: 0 +} + +abbr[title] { +border-bottom: 1px dotted +} + +b,strong { +font-weight: 700 +} + +dfn { +font-style: italic +} + +h1 { +font-size: 2em; +margin: .67em 0 +} + +mark { +background: #ff0; +color: #000 +} + +small { +font-size: 80% +} + +sub,sup { +font-size: 75%; +line-height: 0; +position: relative; +vertical-align: baseline +} + +sup { +top: -.5em +} + +sub { +bottom: -.25em +} + +img { +border: 0 +} + +svg:not(:root) { +overflow: hidden +} + +figure { +margin: 1em 40px +} + +hr { +-webkit-box-sizing: content-box; +-moz-box-sizing: content-box; +box-sizing: content-box; +height: 0 +} + +pre { +overflow: auto +} + +code,kbd,pre,samp { +font-family: monospace,monospace; +font-size: 1em +} + +button,input,optgroup,select,textarea { +color: inherit; +font: inherit; +margin: 0 +} + +button { +overflow: visible +} + +button,select { +text-transform: none +} + +button,html input[type="button"],input[type="reset"],input[type="submit"] { +-webkit-appearance: button; +cursor: pointer +} + +button[disabled],html input[disabled] { +cursor: default +} + +button::-moz-focus-inner,input::-moz-focus-inner { +border: 0; +padding: 0 +} + +input { +line-height: normal +} + +input[type="checkbox"],input[type="radio"] { +-webkit-box-sizing: border-box; +-moz-box-sizing: border-box; +box-sizing: border-box; +padding: 0 +} + +input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button { +height: auto +} + +input[type="search"] { +-webkit-appearance: textfield; +-webkit-box-sizing: content-box; +-moz-box-sizing: content-box; +box-sizing: content-box +} + +input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration { +-webkit-appearance: none +} + +fieldset { +border: 1px solid silver; +margin: 0 2px; +padding: .35em .625em .75em +} + +legend { +border: 0; +padding: 0 +} + +textarea { +overflow: auto +} + +optgroup { +font-weight: 700 +} + +table { +border-collapse: collapse; +border-spacing: 0 +} + +td,th { +padding: 0 +} + +@font-face { +font-family: 'Glyphicons Halflings'; +src: url(/res/fonts/glyphicons-halflings-regular.eot); +src: url(/res/fonts/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(/res/fonts/glyphicons-halflings-regular.woff2) format("woff2"),url(/res/fonts/glyphicons-halflings-regular.woff) format("woff"),url(/res/fonts/glyphicons-halflings-regular.ttf) format("truetype"),url(/res/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg") +} + +.glyphicon { +position: relative; +top: 1px; +display: inline-block; +font-family: 'Glyphicons Halflings'; +font-style: normal; +font-weight: 400; +line-height: 1; +-webkit-font-smoothing: antialiased; +-moz-osx-font-smoothing: grayscale +} + +.glyphicon-asterisk:before { +content: "\2a" +} + +.glyphicon-plus:before { +content: "\2b" +} + +.glyphicon-euro:before,.glyphicon-eur:before { +content: "\20ac" +} + +.glyphicon-minus:before { +content: "\2212" +} + +.glyphicon-cloud:before { +content: "\2601" +} + +.glyphicon-envelope:before { +content: "\2709" +} + +.glyphicon-pencil:before { +content: "\270f" +} + +.glyphicon-glass:before { +content: "\e001" +} + +.glyphicon-music:before { +content: "\e002" +} + +.glyphicon-search:before { +content: "\e003" +} + +.glyphicon-heart:before { +content: "\e005" +} + +.glyphicon-star:before { +content: "\e006" +} + +.glyphicon-star-empty:before { +content: "\e007" +} + +.glyphicon-user:before { +content: "\e008" +} + +.glyphicon-film:before { +content: "\e009" +} + +.glyphicon-th-large:before { +content: "\e010" +} + +.glyphicon-th:before { +content: "\e011" +} + +.glyphicon-th-list:before { +content: "\e012" +} + +.glyphicon-ok:before { +content: "\e013" +} + +.glyphicon-remove:before { +content: "\e014" +} + +.glyphicon-zoom-in:before { +content: "\e015" +} + +.glyphicon-zoom-out:before { +content: "\e016" +} + +.glyphicon-off:before { +content: "\e017" +} + +.glyphicon-signal:before { +content: "\e018" +} + +.glyphicon-cog:before { +content: "\e019" +} + +.glyphicon-trash:before { +content: "\e020" +} + +.glyphicon-home:before { +content: "\e021" +} + +.glyphicon-file:before { +content: "\e022" +} + +.glyphicon-time:before { +content: "\e023" +} + +.glyphicon-road:before { +content: "\e024" +} + +.glyphicon-download-alt:before { +content: "\e025" +} + +.glyphicon-download:before { +content: "\e026" +} + +.glyphicon-upload:before { +content: "\e027" +} + +.glyphicon-inbox:before { +content: "\e028" +} + +.glyphicon-play-circle:before { +content: "\e029" +} + +.glyphicon-repeat:before { +content: "\e030" +} + +.glyphicon-refresh:before { +content: "\e031" +} + +.glyphicon-list-alt:before { +content: "\e032" +} + +.glyphicon-lock:before { +content: "\e033" +} + +.glyphicon-flag:before { +content: "\e034" +} + +.glyphicon-headphones:before { +content: "\e035" +} + +.glyphicon-volume-off:before { +content: "\e036" +} + +.glyphicon-volume-down:before { +content: "\e037" +} + +.glyphicon-volume-up:before { +content: "\e038" +} + +.glyphicon-qrcode:before { +content: "\e039" +} + +.glyphicon-barcode:before { +content: "\e040" +} + +.glyphicon-tag:before { +content: "\e041" +} + +.glyphicon-tags:before { +content: "\e042" +} + +.glyphicon-book:before { +content: "\e043" +} + +.glyphicon-bookmark:before { +content: "\e044" +} + +.glyphicon-print:before { +content: "\e045" +} + +.glyphicon-camera:before { +content: "\e046" +} + +.glyphicon-font:before { +content: "\e047" +} + +.glyphicon-bold:before { +content: "\e048" +} + +.glyphicon-italic:before { +content: "\e049" +} + +.glyphicon-text-height:before { +content: "\e050" +} + +.glyphicon-text-width:before { +content: "\e051" +} + +.glyphicon-align-left:before { +content: "\e052" +} + +.glyphicon-align-center:before { +content: "\e053" +} + +.glyphicon-align-right:before { +content: "\e054" +} + +.glyphicon-align-justify:before { +content: "\e055" +} + +.glyphicon-list:before { +content: "\e056" +} + +.glyphicon-indent-left:before { +content: "\e057" +} + +.glyphicon-indent-right:before { +content: "\e058" +} + +.glyphicon-facetime-video:before { +content: "\e059" +} + +.glyphicon-picture:before { +content: "\e060" +} + +.glyphicon-map-marker:before { +content: "\e062" +} + +.glyphicon-adjust:before { +content: "\e063" +} + +.glyphicon-tint:before { +content: "\e064" +} + +.glyphicon-edit:before { +content: "\e065" +} + +.glyphicon-share:before { +content: "\e066" +} + +.glyphicon-check:before { +content: "\e067" +} + +.glyphicon-move:before { +content: "\e068" +} + +.glyphicon-step-backward:before { +content: "\e069" +} + +.glyphicon-fast-backward:before { +content: "\e070" +} + +.glyphicon-backward:before { +content: "\e071" +} + +.glyphicon-play:before { +content: "\e072" +} + +.glyphicon-pause:before { +content: "\e073" +} + +.glyphicon-stop:before { +content: "\e074" +} + +.glyphicon-forward:before { +content: "\e075" +} + +.glyphicon-fast-forward:before { +content: "\e076" +} + +.glyphicon-step-forward:before { +content: "\e077" +} + +.glyphicon-eject:before { +content: "\e078" +} + +.glyphicon-chevron-left:before { +content: "\e079" +} + +.glyphicon-chevron-right:before { +content: "\e080" +} + +.glyphicon-plus-sign:before { +content: "\e081" +} + +.glyphicon-minus-sign:before { +content: "\e082" +} + +.glyphicon-remove-sign:before { +content: "\e083" +} + +.glyphicon-ok-sign:before { +content: "\e084" +} + +.glyphicon-question-sign:before { +content: "\e085" +} + +.glyphicon-info-sign:before { +content: "\e086" +} + +.glyphicon-screenshot:before { +content: "\e087" +} + +.glyphicon-remove-circle:before { +content: "\e088" +} + +.glyphicon-ok-circle:before { +content: "\e089" +} + +.glyphicon-ban-circle:before { +content: "\e090" +} + +.glyphicon-arrow-left:before { +content: "\e091" +} + +.glyphicon-arrow-right:before { +content: "\e092" +} + +.glyphicon-arrow-up:before { +content: "\e093" +} + +.glyphicon-arrow-down:before { +content: "\e094" +} + +.glyphicon-share-alt:before { +content: "\e095" +} + +.glyphicon-resize-full:before { +content: "\e096" +} + +.glyphicon-resize-small:before { +content: "\e097" +} + +.glyphicon-exclamation-sign:before { +content: "\e101" +} + +.glyphicon-gift:before { +content: "\e102" +} + +.glyphicon-leaf:before { +content: "\e103" +} + +.glyphicon-fire:before { +content: "\e104" +} + +.glyphicon-eye-open:before { +content: "\e105" +} + +.glyphicon-eye-close:before { +content: "\e106" +} + +.glyphicon-warning-sign:before { +content: "\e107" +} + +.glyphicon-plane:before { +content: "\e108" +} + +.glyphicon-calendar:before { +content: "\e109" +} + +.glyphicon-random:before { +content: "\e110" +} + +.glyphicon-comment:before { +content: "\e111" +} + +.glyphicon-magnet:before { +content: "\e112" +} + +.glyphicon-chevron-up:before { +content: "\e113" +} + +.glyphicon-chevron-down:before { +content: "\e114" +} + +.glyphicon-retweet:before { +content: "\e115" +} + +.glyphicon-shopping-cart:before { +content: "\e116" +} + +.glyphicon-folder-close:before { +content: "\e117" +} + +.glyphicon-folder-open:before { +content: "\e118" +} + +.glyphicon-resize-vertical:before { +content: "\e119" +} + +.glyphicon-resize-horizontal:before { +content: "\e120" +} + +.glyphicon-hdd:before { +content: "\e121" +} + +.glyphicon-bullhorn:before { +content: "\e122" +} + +.glyphicon-bell:before { +content: "\e123" +} + +.glyphicon-certificate:before { +content: "\e124" +} + +.glyphicon-thumbs-up:before { +content: "\e125" +} + +.glyphicon-thumbs-down:before { +content: "\e126" +} + +.glyphicon-hand-right:before { +content: "\e127" +} + +.glyphicon-hand-left:before { +content: "\e128" +} + +.glyphicon-hand-up:before { +content: "\e129" +} + +.glyphicon-hand-down:before { +content: "\e130" +} + +.glyphicon-circle-arrow-right:before { +content: "\e131" +} + +.glyphicon-circle-arrow-left:before { +content: "\e132" +} + +.glyphicon-circle-arrow-up:before { +content: "\e133" +} + +.glyphicon-circle-arrow-down:before { +content: "\e134" +} + +.glyphicon-globe:before { +content: "\e135" +} + +.glyphicon-wrench:before { +content: "\e136" +} + +.glyphicon-tasks:before { +content: "\e137" +} + +.glyphicon-filter:before { +content: "\e138" +} + +.glyphicon-briefcase:before { +content: "\e139" +} + +.glyphicon-fullscreen:before { +content: "\e140" +} + +.glyphicon-dashboard:before { +content: "\e141" +} + +.glyphicon-paperclip:before { +content: "\e142" +} + +.glyphicon-heart-empty:before { +content: "\e143" +} + +.glyphicon-link:before { +content: "\e144" +} + +.glyphicon-phone:before { +content: "\e145" +} + +.glyphicon-pushpin:before { +content: "\e146" +} + +.glyphicon-usd:before { +content: "\e148" +} + +.glyphicon-gbp:before { +content: "\e149" +} + +.glyphicon-sort:before { +content: "\e150" +} + +.glyphicon-sort-by-alphabet:before { +content: "\e151" +} + +.glyphicon-sort-by-alphabet-alt:before { +content: "\e152" +} + +.glyphicon-sort-by-order:before { +content: "\e153" +} + +.glyphicon-sort-by-order-alt:before { +content: "\e154" +} + +.glyphicon-sort-by-attributes:before { +content: "\e155" +} + +.glyphicon-sort-by-attributes-alt:before { +content: "\e156" +} + +.glyphicon-unchecked:before { +content: "\e157" +} + +.glyphicon-expand:before { +content: "\e158" +} + +.glyphicon-collapse-down:before { +content: "\e159" +} + +.glyphicon-collapse-up:before { +content: "\e160" +} + +.glyphicon-log-in:before { +content: "\e161" +} + +.glyphicon-flash:before { +content: "\e162" +} + +.glyphicon-log-out:before { +content: "\e163" +} + +.glyphicon-new-window:before { +content: "\e164" +} + +.glyphicon-record:before { +content: "\e165" +} + +.glyphicon-save:before { +content: "\e166" +} + +.glyphicon-open:before { +content: "\e167" +} + +.glyphicon-saved:before { +content: "\e168" +} + +.glyphicon-import:before { +content: "\e169" +} + +.glyphicon-export:before { +content: "\e170" +} + +.glyphicon-send:before { +content: "\e171" +} + +.glyphicon-floppy-disk:before { +content: "\e172" +} + +.glyphicon-floppy-saved:before { +content: "\e173" +} + +.glyphicon-floppy-remove:before { +content: "\e174" +} + +.glyphicon-floppy-save:before { +content: "\e175" +} + +.glyphicon-floppy-open:before { +content: "\e176" +} + +.glyphicon-credit-card:before { +content: "\e177" +} + +.glyphicon-transfer:before { +content: "\e178" +} + +.glyphicon-cutlery:before { +content: "\e179" +} + +.glyphicon-header:before { +content: "\e180" +} + +.glyphicon-compressed:before { +content: "\e181" +} + +.glyphicon-earphone:before { +content: "\e182" +} + +.glyphicon-phone-alt:before { +content: "\e183" +} + +.glyphicon-tower:before { +content: "\e184" +} + +.glyphicon-stats:before { +content: "\e185" +} + +.glyphicon-sd-video:before { +content: "\e186" +} + +.glyphicon-hd-video:before { +content: "\e187" +} + +.glyphicon-subtitles:before { +content: "\e188" +} + +.glyphicon-sound-stereo:before { +content: "\e189" +} + +.glyphicon-sound-dolby:before { +content: "\e190" +} + +.glyphicon-sound-5-1:before { +content: "\e191" +} + +.glyphicon-sound-6-1:before { +content: "\e192" +} + +.glyphicon-sound-7-1:before { +content: "\e193" +} + +.glyphicon-copyright-mark:before { +content: "\e194" +} + +.glyphicon-registration-mark:before { +content: "\e195" +} + +.glyphicon-cloud-download:before { +content: "\e197" +} + +.glyphicon-cloud-upload:before { +content: "\e198" +} + +.glyphicon-tree-conifer:before { +content: "\e199" +} + +.glyphicon-tree-deciduous:before { +content: "\e200" +} + +.glyphicon-cd:before { +content: "\e201" +} + +.glyphicon-save-file:before { +content: "\e202" +} + +.glyphicon-open-file:before { +content: "\e203" +} + +.glyphicon-level-up:before { +content: "\e204" +} + +.glyphicon-copy:before { +content: "\e205" +} + +.glyphicon-paste:before { +content: "\e206" +} + +.glyphicon-alert:before { +content: "\e209" +} + +.glyphicon-equalizer:before { +content: "\e210" +} + +.glyphicon-king:before { +content: "\e211" +} + +.glyphicon-queen:before { +content: "\e212" +} + +.glyphicon-pawn:before { +content: "\e213" +} + +.glyphicon-bishop:before { +content: "\e214" +} + +.glyphicon-knight:before { +content: "\e215" +} + +.glyphicon-baby-formula:before { +content: "\e216" +} + +.glyphicon-tent:before { +content: "\26fa" +} + +.glyphicon-blackboard:before { +content: "\e218" +} + +.glyphicon-bed:before { +content: "\e219" +} + +.glyphicon-apple:before { +content: "\f8ff" +} + +.glyphicon-erase:before { +content: "\e221" +} + +.glyphicon-hourglass:before { +content: "\231b" +} + +.glyphicon-lamp:before { +content: "\e223" +} + +.glyphicon-duplicate:before { +content: "\e224" +} + +.glyphicon-piggy-bank:before { +content: "\e225" +} + +.glyphicon-scissors:before { +content: "\e226" +} + +.glyphicon-bitcoin:before { +content: "\e227" +} + +.glyphicon-btc:before { +content: "\e227" +} + +.glyphicon-xbt:before { +content: "\e227" +} + +.glyphicon-yen:before { +content: "\00a5" +} + +.glyphicon-jpy:before { +content: "\00a5" +} + +.glyphicon-ruble:before { +content: "\20bd" +} + +.glyphicon-rub:before { +content: "\20bd" +} + +.glyphicon-scale:before { +content: "\e230" +} + +.glyphicon-ice-lolly:before { +content: "\e231" +} + +.glyphicon-ice-lolly-tasted:before { +content: "\e232" +} + +.glyphicon-education:before { +content: "\e233" +} + +.glyphicon-option-horizontal:before { +content: "\e234" +} + +.glyphicon-option-vertical:before { +content: "\e235" +} + +.glyphicon-menu-hamburger:before { +content: "\e236" +} + +.glyphicon-modal-window:before { +content: "\e237" +} + +.glyphicon-oil:before { +content: "\e238" +} + +.glyphicon-grain:before { +content: "\e239" +} + +.glyphicon-sunglasses:before { +content: "\e240" +} + +.glyphicon-text-size:before { +content: "\e241" +} + +.glyphicon-text-color:before { +content: "\e242" +} + +.glyphicon-text-background:before { +content: "\e243" +} + +.glyphicon-object-align-top:before { +content: "\e244" +} + +.glyphicon-object-align-bottom:before { +content: "\e245" +} + +.glyphicon-object-align-horizontal:before { +content: "\e246" +} + +.glyphicon-object-align-left:before { +content: "\e247" +} + +.glyphicon-object-align-vertical:before { +content: "\e248" +} + +.glyphicon-object-align-right:before { +content: "\e249" +} + +.glyphicon-triangle-right:before { +content: "\e250" +} + +.glyphicon-triangle-left:before { +content: "\e251" +} + +.glyphicon-triangle-bottom:before { +content: "\e252" +} + +.glyphicon-triangle-top:before { +content: "\e253" +} + +.glyphicon-console:before { +content: "\e254" +} + +.glyphicon-superscript:before { +content: "\e255" +} + +.glyphicon-subscript:before { +content: "\e256" +} + +.glyphicon-menu-left:before { +content: "\e257" +} + +.glyphicon-menu-right:before { +content: "\e258" +} + +.glyphicon-menu-down:before { +content: "\e259" +} + +.glyphicon-menu-up:before { +content: "\e260" +} + +* { +-webkit-box-sizing: border-box; +-moz-box-sizing: border-box; +box-sizing: border-box +} + +:before,:after { +-webkit-box-sizing: border-box; +-moz-box-sizing: border-box; +box-sizing: border-box +} + +html { +font-size: 10px; +-webkit-tap-highlight-color: rgba(0,0,0,0) +} + +input,button,select,textarea { +font-family: inherit; +font-size: inherit; +line-height: inherit +} + +a { +color: #337ab7; +text-decoration: none +} + +a:hover,a:focus { +color: #23527c; +text-decoration: underline +} + +a:focus { +outline: thin dotted; +outline: 5px auto -webkit-focus-ring-color; +outline-offset: -2px +} + +figure { +margin: 0 +} + +img { +vertical-align: middle +} + +.img-responsive,.thumbnail > img,.thumbnail a > img,.carousel-inner > .item > img,.carousel-inner > .item > a > img { +display: block; +max-width: 100%; +height: auto +} + +.img-rounded { +border-radius: 6px +} + +.img-thumbnail { +padding: 4px; +line-height: 1.42857143; +background-color: #fff; +border: 1px solid #ddd; +border-radius: 4px; +-webkit-transition: all .2s ease-in-out; +-o-transition: all .2s ease-in-out; +transition: all .2s ease-in-out; +display: inline-block; +max-width: 100%; +height: auto +} + +.img-circle { +border-radius: 50% +} + +hr { +margin-top: 20px; +margin-bottom: 20px; +border: 0; +border-top: 1px solid #eee +} + +.sr-only { +position: absolute; +width: 1px; +height: 1px; +margin: -1px; +padding: 0; +overflow: hidden; +clip: rect(0,0,0,0); +border: 0 +} + +.sr-only-focusable:active,.sr-only-focusable:focus { +position: static; +width: auto; +height: auto; +margin: 0; +overflow: visible; +clip: auto +} + +[role="button"] { +cursor: pointer +} + +table { +background-color: transparent +} + +caption { +padding-top: 8px; +padding-bottom: 8px; +color: #777; +text-align: left +} + +th { +text-align: left +} + +.table { +width: 100%; +max-width: 100%; +margin-bottom: 20px +} + +.table > thead > tr > th,.table > tbody > tr > th,.table > tfoot > tr > th,.table > thead > tr > td,.table > tbody > tr > td,.table > tfoot > tr > td { +padding: 8px; +line-height: 1.42857143; +vertical-align: top; +border-top: 1px solid #ddd +} + +.table > thead > tr > th { +vertical-align: bottom; +border-bottom: 2px solid #ddd +} + +.table > caption + thead > tr:first-child > th,.table > colgroup + thead > tr:first-child > th,.table > thead:first-child > tr:first-child > th,.table > caption + thead > tr:first-child > td,.table > colgroup + thead > tr:first-child > td,.table > thead:first-child > tr:first-child > td { +border-top: 0 +} + +.table > tbody + tbody { +border-top: 2px solid #ddd +} + +.table .table { +background-color: #fff +} + +.table-condensed > thead > tr > th,.table-condensed > tbody > tr > th,.table-condensed > tfoot > tr > th,.table-condensed > thead > tr > td,.table-condensed > tbody > tr > td,.table-condensed > tfoot > tr > td { +padding: 5px +} + +.table-bordered { +border: 1px solid #ddd +} + +.table-bordered > thead > tr > th,.table-bordered > tbody > tr > th,.table-bordered > tfoot > tr > th,.table-bordered > thead > tr > td,.table-bordered > tbody > tr > td,.table-bordered > tfoot > tr > td { +border: 1px solid #ddd +} + +.table-bordered > thead > tr > th,.table-bordered > thead > tr > td { +border-bottom-width: 2px +} + +.table-striped > tbody > tr:nth-of-type(odd) { +background-color: #f9f9f9 +} + +.table-hover > tbody > tr:hover { +background-color: #f5f5f5 +} + +table col[class*="col-"] { +position: static; +float: none; +display: table-column +} + +table td[class*="col-"],table th[class*="col-"] { +position: static; +float: none; +display: table-cell +} + +.table > thead > tr > td.active,.table > tbody > tr > td.active,.table > tfoot > tr > td.active,.table > thead > tr > th.active,.table > tbody > tr > th.active,.table > tfoot > tr > th.active,.table > thead > tr.active > td,.table > tbody > tr.active > td,.table > tfoot > tr.active > td,.table > thead > tr.active > th,.table > tbody > tr.active > th,.table > tfoot > tr.active > th { +background-color: #f5f5f5 +} + +.table-hover > tbody > tr > td.active:hover,.table-hover > tbody > tr > th.active:hover,.table-hover > tbody > tr.active:hover > td,.table-hover > tbody > tr:hover > .active,.table-hover > tbody > tr.active:hover > th { +background-color: #e8e8e8 +} + +.table > thead > tr > td.success,.table > tbody > tr > td.success,.table > tfoot > tr > td.success,.table > thead > tr > th.success,.table > tbody > tr > th.success,.table > tfoot > tr > th.success,.table > thead > tr.success > td,.table > tbody > tr.success > td,.table > tfoot > tr.success > td,.table > thead > tr.success > th,.table > tbody > tr.success > th,.table > tfoot > tr.success > th { +background-color: #dff0d8 +} + +.table-hover > tbody > tr > td.success:hover,.table-hover > tbody > tr > th.success:hover,.table-hover > tbody > tr.success:hover > td,.table-hover > tbody > tr:hover > .success,.table-hover > tbody > tr.success:hover > th { +background-color: #d0e9c6 +} + +.table > thead > tr > td.info,.table > tbody > tr > td.info,.table > tfoot > tr > td.info,.table > thead > tr > th.info,.table > tbody > tr > th.info,.table > tfoot > tr > th.info,.table > thead > tr.info > td,.table > tbody > tr.info > td,.table > tfoot > tr.info > td,.table > thead > tr.info > th,.table > tbody > tr.info > th,.table > tfoot > tr.info > th { +background-color: #d9edf7 +} + +.table-hover > tbody > tr > td.info:hover,.table-hover > tbody > tr > th.info:hover,.table-hover > tbody > tr.info:hover > td,.table-hover > tbody > tr:hover > .info,.table-hover > tbody > tr.info:hover > th { +background-color: #c4e3f3 +} + +.table > thead > tr > td.warning,.table > tbody > tr > td.warning,.table > tfoot > tr > td.warning,.table > thead > tr > th.warning,.table > tbody > tr > th.warning,.table > tfoot > tr > th.warning,.table > thead > tr.warning > td,.table > tbody > tr.warning > td,.table > tfoot > tr.warning > td,.table > thead > tr.warning > th,.table > tbody > tr.warning > th,.table > tfoot > tr.warning > th { +background-color: #fcf8e3 +} + +.table-hover > tbody > tr > td.warning:hover,.table-hover > tbody > tr > th.warning:hover,.table-hover > tbody > tr.warning:hover > td,.table-hover > tbody > tr:hover > .warning,.table-hover > tbody > tr.warning:hover > th { +background-color: #faf2cc +} + +.table > thead > tr > td.danger,.table > tbody > tr > td.danger,.table > tfoot > tr > td.danger,.table > thead > tr > th.danger,.table > tbody > tr > th.danger,.table > tfoot > tr > th.danger,.table > thead > tr.danger > td,.table > tbody > tr.danger > td,.table > tfoot > tr.danger > td,.table > thead > tr.danger > th,.table > tbody > tr.danger > th,.table > tfoot > tr.danger > th { +background-color: #f2dede +} + +.table-hover > tbody > tr > td.danger:hover,.table-hover > tbody > tr > th.danger:hover,.table-hover > tbody > tr.danger:hover > td,.table-hover > tbody > tr:hover > .danger,.table-hover > tbody > tr.danger:hover > th { +background-color: #ebcccc +} + +.table-responsive { +overflow-x: auto; +min-height: .01% +} + +@media screen and (max-width: 767px) { +.table-responsive { +width:100%; +margin-bottom: 15px; +overflow-y: hidden; +-ms-overflow-style: -ms-autohiding-scrollbar; +border: 1px solid #ddd +} + +.table-responsive > .table { +margin-bottom: 0 +} + +.table-responsive > .table > thead > tr > th,.table-responsive > .table > tbody > tr > th,.table-responsive > .table > tfoot > tr > th,.table-responsive > .table > thead > tr > td,.table-responsive > .table > tbody > tr > td,.table-responsive > .table > tfoot > tr > td { +white-space: nowrap +} + +.table-responsive > .table-bordered { +border: 0 +} + +.table-responsive > .table-bordered > thead > tr > th:first-child,.table-responsive > .table-bordered > tbody > tr > th:first-child,.table-responsive > .table-bordered > tfoot > tr > th:first-child,.table-responsive > .table-bordered > thead > tr > td:first-child,.table-responsive > .table-bordered > tbody > tr > td:first-child,.table-responsive > .table-bordered > tfoot > tr > td:first-child { +border-left: 0 +} + +.table-responsive > .table-bordered > thead > tr > th:last-child,.table-responsive > .table-bordered > tbody > tr > th:last-child,.table-responsive > .table-bordered > tfoot > tr > th:last-child,.table-responsive > .table-bordered > thead > tr > td:last-child,.table-responsive > .table-bordered > tbody > tr > td:last-child,.table-responsive > .table-bordered > tfoot > tr > td:last-child { +border-right: 0 +} + +.table-responsive > .table-bordered > tbody > tr:last-child > th,.table-responsive > .table-bordered > tfoot > tr:last-child > th,.table-responsive > .table-bordered > tbody > tr:last-child > td,.table-responsive > .table-bordered > tfoot > tr:last-child > td { +border-bottom: 0 +} +} + +fieldset { +padding: 0; +margin: 0; +border: 0; +min-width: 0 +} + +legend { +display: block; +width: 100%; +padding: 0; +margin-bottom: 20px; +font-size: 21px; +line-height: inherit; +color: #333; +border: 0; +border-bottom: 1px solid #e5e5e5 +} + +label { +display: inline-block; +max-width: 100%; +margin-bottom: 5px; +font-weight: 700 +} + +input[type="search"] { +-webkit-box-sizing: border-box; +-moz-box-sizing: border-box; +box-sizing: border-box +} + +input[type="radio"],input[type="checkbox"] { +margin: 4px 0 0; +margin-top: 1px \9; +line-height: normal +} + +input[type="file"] { +display: block +} + +input[type="range"] { +display: block; +width: 100% +} + +select[multiple],select[size] { +height: auto +} + +input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus { +outline: thin dotted; +outline: 5px auto -webkit-focus-ring-color; +outline-offset: -2px +} + +output { +display: block; +padding-top: 7px; +font-size: 14px; +line-height: 1.42857143; +color: #555 +} + +.form-control { +display: block; +width: 100%; +height: 34px; +padding: 6px 12px; +font-size: 14px; +line-height: 1.42857143; +color: #555; +background-color: #fff; +background-image: none; +border: 1px solid #ccc; +border-radius: 4px; +-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); +box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); +-webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; +-o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; +transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s +} + +.form-control:focus { +border-color: #66afe9; +outline: 0; +-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6); +box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,0.6) +} + +.form-control::-moz-placeholder { +color: #999; +opacity: 1 +} + +.form-control:-ms-input-placeholder { +color: #999 +} + +.form-control::-webkit-input-placeholder { +color: #999 +} + +.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control { +background-color: #eee; +opacity: 1 +} + +.form-control[disabled],fieldset[disabled] .form-control { +cursor: not-allowed +} + +textarea.form-control { +height: auto +} + +input[type="search"] { +-webkit-appearance: none +} + +@media screen and (-webkit-min-device-pixel-ratio: 0) { +input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control { +line-height:34px +} + +input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"] { +line-height: 30px +} + +input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"] { +line-height: 46px +} +} + +.form-group { +margin-bottom: 15px +} + +.radio,.checkbox { +position: relative; +display: block; +margin-top: 10px; +margin-bottom: 10px +} + +.radio label,.checkbox label { +min-height: 20px; +padding-left: 20px; +margin-bottom: 0; +font-weight: 400; +cursor: pointer +} + +.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"] { +position: absolute; +margin-left: -20px; +margin-top: 4px \9 +} + +.radio + .radio,.checkbox + .checkbox { +margin-top: -5px +} + +.radio-inline,.checkbox-inline { +position: relative; +display: inline-block; +padding-left: 20px; +margin-bottom: 0; +vertical-align: middle; +font-weight: 400; +cursor: pointer +} + +.radio-inline + .radio-inline,.checkbox-inline + .checkbox-inline { +margin-top: 0; +margin-left: 10px +} + +input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"] { +cursor: not-allowed +} + +.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline { +cursor: not-allowed +} + +.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label { +cursor: not-allowed +} + +.form-control-static { +padding-top: 7px; +padding-bottom: 7px; +margin-bottom: 0; +min-height: 34px +} + +.form-control-static.input-lg,.form-control-static.input-sm { +padding-left: 0; +padding-right: 0 +} + +.input-sm { +height: 30px; +padding: 5px 10px; +font-size: 12px; +line-height: 1.5; +border-radius: 3px +} + +select.input-sm { +height: 30px; +line-height: 30px +} + +textarea.input-sm,select[multiple].input-sm { +height: auto +} + +.form-group-sm .form-control { +height: 30px; +padding: 5px 10px; +font-size: 12px; +line-height: 1.5; +border-radius: 3px +} + +.form-group-sm select.form-control { +height: 30px; +line-height: 30px +} + +.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control { +height: auto +} + +.form-group-sm .form-control-static { +height: 30px; +min-height: 32px; +padding: 6px 10px; +font-size: 12px; +line-height: 1.5 +} + +.input-lg { +height: 46px; +padding: 10px 16px; +font-size: 18px; +line-height: 1.3333333; +border-radius: 6px +} + +select.input-lg { +height: 46px; +line-height: 46px +} + +textarea.input-lg,select[multiple].input-lg { +height: auto +} + +.form-group-lg .form-control { +height: 46px; +padding: 10px 16px; +font-size: 18px; +line-height: 1.3333333; +border-radius: 6px +} + +.form-group-lg select.form-control { +height: 46px; +line-height: 46px +} + +.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control { +height: auto +} + +.form-group-lg .form-control-static { +height: 46px; +min-height: 38px; +padding: 11px 16px; +font-size: 18px; +line-height: 1.3333333 +} + +.has-feedback { +position: relative +} + +.has-feedback .form-control { +padding-right: 42.5px +} + +.form-control-feedback { +position: absolute; +top: 0; +right: 0; +z-index: 2; +display: block; +width: 34px; +height: 34px; +line-height: 34px; +text-align: center; +pointer-events: none +} + +.input-lg + .form-control-feedback,.input-group-lg + .form-control-feedback,.form-group-lg .form-control + .form-control-feedback { +width: 46px; +height: 46px; +line-height: 46px +} + +.input-sm + .form-control-feedback,.input-group-sm + .form-control-feedback,.form-group-sm .form-control + .form-control-feedback { +width: 30px; +height: 30px; +line-height: 30px +} + +.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label { +color: #3c763d +} + +.has-success .form-control { +border-color: #3c763d; +-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); +box-shadow: inset 0 1px 1px rgba(0,0,0,0.075) +} + +.has-success .form-control:focus { +border-color: #2b542c; +-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168; +box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168 +} + +.has-success .input-group-addon { +color: #3c763d; +border-color: #3c763d; +background-color: #dff0d8 +} + +.has-success .form-control-feedback { +color: #3c763d +} + +.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label { +color: #8a6d3b +} + +.has-warning .form-control { +border-color: #8a6d3b; +-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); +box-shadow: inset 0 1px 1px rgba(0,0,0,0.075) +} + +.has-warning .form-control:focus { +border-color: #66512c; +-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b; +box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b +} + +.has-warning .input-group-addon { +color: #8a6d3b; +border-color: #8a6d3b; +background-color: #fcf8e3 +} + +.has-warning .form-control-feedback { +color: #8a6d3b +} + +.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label { +color: #a94442 +} + +.has-error .form-control { +border-color: #a94442; +-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); +box-shadow: inset 0 1px 1px rgba(0,0,0,0.075) +} + +.has-error .form-control:focus { +border-color: #843534; +-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483; +box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483 +} + +.has-error .input-group-addon { +color: #a94442; +border-color: #a94442; +background-color: #f2dede +} + +.has-error .form-control-feedback { +color: #a94442 +} + +.has-feedback label ~ .form-control-feedback { +top: 25px +} + +.has-feedback label.sr-only ~ .form-control-feedback { +top: 0 +} + +.help-block { +display: block; +margin-top: 5px; +margin-bottom: 10px; +color: #737373 +} + +@media (min-width: 768px) { +.form-inline .form-group { +display:inline-block; +margin-bottom: 0; +vertical-align: middle +} + +.form-inline .form-control { +display: inline-block; +width: auto; +vertical-align: middle +} + +.form-inline .form-control-static { +display: inline-block +} + +.form-inline .input-group { +display: inline-table; +vertical-align: middle +} + +.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control { +width: auto +} + +.form-inline .input-group > .form-control { +width: 100% +} + +.form-inline .control-label { +margin-bottom: 0; +vertical-align: middle +} + +.form-inline .radio,.form-inline .checkbox { +display: inline-block; +margin-top: 0; +margin-bottom: 0; +vertical-align: middle +} + +.form-inline .radio label,.form-inline .checkbox label { +padding-left: 0 +} + +.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"] { +position: relative; +margin-left: 0 +} + +.form-inline .has-feedback .form-control-feedback { +top: 0 +} +} + +.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline { +margin-top: 0; +margin-bottom: 0; +padding-top: 7px +} + +.form-horizontal .radio,.form-horizontal .checkbox { +min-height: 27px +} + +.form-horizontal .form-group { +margin-left: -15px; +margin-right: -15px +} + +@media (min-width: 768px) { +.form-horizontal .control-label { +text-align:right; +margin-bottom: 0; +padding-top: 7px +} +} + +.form-horizontal .has-feedback .form-control-feedback { +right: 15px +} + +@media (min-width: 768px) { +.form-horizontal .form-group-lg .control-label { +padding-top:14.333333px; +font-size: 18px +} +} + +@media (min-width: 768px) { +.form-horizontal .form-group-sm .control-label { +padding-top:6px; +font-size: 12px +} +} + +.btn { +display: inline-block; +margin-bottom: 0; +font-weight: 400; +text-align: center; +vertical-align: middle; +-ms-touch-action: manipulation; +touch-action: manipulation; +cursor: pointer; +background-image: none; +border: 1px solid transparent; +white-space: nowrap; +padding: 6px 12px; +font-size: 14px; +line-height: 1.42857143; +border-radius: 4px; +-webkit-user-select: none; +-moz-user-select: none; +-ms-user-select: none; +user-select: none +} + +.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus { +outline: thin dotted; +outline: 5px auto -webkit-focus-ring-color; +outline-offset: -2px +} + +.btn:hover,.btn:focus,.btn.focus { +color: #333; +text-decoration: none +} + +.btn:active,.btn.active { +outline: 0; +background-image: none; +-webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125); +box-shadow: inset 0 3px 5px rgba(0,0,0,0.125) +} + +.btn.disabled,.btn[disabled],fieldset[disabled] .btn { +cursor: not-allowed; +opacity: .65; +filter: alpha(opacity=65); +-webkit-box-shadow: none; +box-shadow: none +} + +a.btn.disabled,fieldset[disabled] a.btn { +pointer-events: none +} + +.btn-default { +color: #333; +background-color: #fff; +border-color: #ccc +} + +.btn-default:focus,.btn-default.focus { +color: #333; +background-color: #e6e6e6; +border-color: #8c8c8c +} + +.btn-default:hover { +color: #333; +background-color: #e6e6e6; +border-color: #adadad +} + +.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default { +color: #333; +background-color: #e6e6e6; +border-color: #adadad +} + +.btn-default:active:hover,.btn-default.active:hover,.open > .dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open > .dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open > .dropdown-toggle.btn-default.focus { +color: #333; +background-color: #d4d4d4; +border-color: #8c8c8c +} + +.btn-default:active,.btn-default.active,.open > .dropdown-toggle.btn-default { +background-image: none +} + +.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active { +background-color: #fff; +border-color: #ccc +} + +.btn-default .badge { +color: #fff; +background-color: #333 +} + +.btn-primary { +color: #fff; +background-color: #337ab7; +border-color: #2e6da4 +} + +.btn-primary:focus,.btn-primary.focus { +color: #fff; +background-color: #286090; +border-color: #122b40 +} + +.btn-primary:hover { +color: #fff; +background-color: #286090; +border-color: #204d74 +} + +.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary { +color: #fff; +background-color: #286090; +border-color: #204d74 +} + +.btn-primary:active:hover,.btn-primary.active:hover,.open > .dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open > .dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open > .dropdown-toggle.btn-primary.focus { +color: #fff; +background-color: #204d74; +border-color: #122b40 +} + +.btn-primary:active,.btn-primary.active,.open > .dropdown-toggle.btn-primary { +background-image: none +} + +.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active { +background-color: #337ab7; +border-color: #2e6da4 +} + +.btn-primary .badge { +color: #337ab7; +background-color: #fff +} + +.btn-success { +color: #fff; +background-color: #5cb85c; +border-color: #4cae4c +} + +.btn-success:focus,.btn-success.focus { +color: #fff; +background-color: #449d44; +border-color: #255625 +} + +.btn-success:hover { +color: #fff; +background-color: #449d44; +border-color: #398439 +} + +.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success { +color: #fff; +background-color: #449d44; +border-color: #398439 +} + +.btn-success:active:hover,.btn-success.active:hover,.open > .dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open > .dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open > .dropdown-toggle.btn-success.focus { +color: #fff; +background-color: #398439; +border-color: #255625 +} + +.btn-success:active,.btn-success.active,.open > .dropdown-toggle.btn-success { +background-image: none +} + +.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active { +background-color: #5cb85c; +border-color: #4cae4c +} + +.btn-success .badge { +color: #5cb85c; +background-color: #fff +} + +.btn-info { +color: #fff; +background-color: #5bc0de; +border-color: #46b8da +} + +.btn-info:focus,.btn-info.focus { +color: #fff; +background-color: #31b0d5; +border-color: #1b6d85 +} + +.btn-info:hover { +color: #fff; +background-color: #31b0d5; +border-color: #269abc +} + +.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info { +color: #fff; +background-color: #31b0d5; +border-color: #269abc +} + +.btn-info:active:hover,.btn-info.active:hover,.open > .dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open > .dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open > .dropdown-toggle.btn-info.focus { +color: #fff; +background-color: #269abc; +border-color: #1b6d85 +} + +.btn-info:active,.btn-info.active,.open > .dropdown-toggle.btn-info { +background-image: none +} + +.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active { +background-color: #5bc0de; +border-color: #46b8da +} + +.btn-info .badge { +color: #5bc0de; +background-color: #fff +} + +.btn-warning { +color: #fff; +background-color: #f0ad4e; +border-color: #eea236 +} + +.btn-warning:focus,.btn-warning.focus { +color: #fff; +background-color: #ec971f; +border-color: #985f0d +} + +.btn-warning:hover { +color: #fff; +background-color: #ec971f; +border-color: #d58512 +} + +.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning { +color: #fff; +background-color: #ec971f; +border-color: #d58512 +} + +.btn-warning:active:hover,.btn-warning.active:hover,.open > .dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open > .dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open > .dropdown-toggle.btn-warning.focus { +color: #fff; +background-color: #d58512; +border-color: #985f0d +} + +.btn-warning:active,.btn-warning.active,.open > .dropdown-toggle.btn-warning { +background-image: none +} + +.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active { +background-color: #f0ad4e; +border-color: #eea236 +} + +.btn-warning .badge { +color: #f0ad4e; +background-color: #fff +} + +.btn-danger { +color: #fff; +background-color: #d9534f; +border-color: #d43f3a +} + +.btn-danger:focus,.btn-danger.focus { +color: #fff; +background-color: #c9302c; +border-color: #761c19 +} + +.btn-danger:hover { +color: #fff; +background-color: #c9302c; +border-color: #ac2925 +} + +.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger { +color: #fff; +background-color: #c9302c; +border-color: #ac2925 +} + +.btn-danger:active:hover,.btn-danger.active:hover,.open > .dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open > .dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open > .dropdown-toggle.btn-danger.focus { +color: #fff; +background-color: #ac2925; +border-color: #761c19 +} + +.btn-danger:active,.btn-danger.active,.open > .dropdown-toggle.btn-danger { +background-image: none +} + +.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active { +background-color: #d9534f; +border-color: #d43f3a +} + +.btn-danger .badge { +color: #d9534f; +background-color: #fff +} + +.btn-link { +color: #337ab7; +font-weight: 400; +border-radius: 0 +} + +.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link { +background-color: transparent; +-webkit-box-shadow: none; +box-shadow: none +} + +.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active { +border-color: transparent +} + +.btn-link:hover,.btn-link:focus { +color: #23527c; +text-decoration: underline; +background-color: transparent +} + +.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus { +color: #777; +text-decoration: none +} + +.btn-lg,.btn-group-lg > .btn { +padding: 10px 16px; +font-size: 18px; +line-height: 1.3333333; +border-radius: 6px +} + +.btn-sm,.btn-group-sm > .btn { +padding: 5px 10px; +font-size: 12px; +line-height: 1.5; +border-radius: 3px +} + +.btn-xs,.btn-group-xs > .btn { +padding: 1px 5px; +font-size: 12px; +line-height: 1.5; +border-radius: 3px +} + +.btn-block { +display: block; +width: 100% +} + +.btn-block + .btn-block { +margin-top: 5px +} + +input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block { +width: 100% +} + +.fade { +opacity: 0; +-webkit-transition: opacity .15s linear; +-o-transition: opacity .15s linear; +transition: opacity .15s linear +} + +.fade.in { +opacity: 1 +} + +.collapse { +display: none +} + +.collapse.in { +display: block +} + +tr.collapse.in { +display: table-row +} + +tbody.collapse.in { +display: table-row-group +} + +.collapsing { +position: relative; +height: 0; +overflow: hidden; +-webkit-transition-property: height,visibility; +-o-transition-property: height,visibility; +transition-property: height,visibility; +-webkit-transition-duration: .35s; +-o-transition-duration: .35s; +transition-duration: .35s; +-webkit-transition-timing-function: ease; +-o-transition-timing-function: ease; +transition-timing-function: ease +} + +.caret { +display: inline-block; +width: 0; +height: 0; +margin-left: 2px; +vertical-align: middle; +border-top: 4px dashed; +border-top: 4px solid \9; +border-right: 4px solid transparent; +border-left: 4px solid transparent +} + +.dropup,.dropdown { +position: relative +} + +.dropdown-toggle:focus { +outline: 0 +} + +.dropdown-menu { +position: absolute; +top: 100%; +left: 0; +z-index: 1000; +display: none; +float: left; +min-width: 160px; +padding: 5px 0; +margin: 2px 0 0; +list-style: none; +font-size: 14px; +text-align: left; +background-color: #fff; +border: 1px solid #ccc; +border: 1px solid rgba(0,0,0,0.15); +border-radius: 4px; +-webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175); +box-shadow: 0 6px 12px rgba(0,0,0,0.175); +-webkit-background-clip: padding-box; +background-clip: padding-box +} + +.dropdown-menu.pull-right { +right: 0; +left: auto +} + +.dropdown-menu .divider { +height: 1px; +margin: 9px 0; +overflow: hidden; +background-color: #e5e5e5 +} + +.dropdown-menu > li > a { +display: block; +padding: 3px 20px; +clear: both; +font-weight: 400; +line-height: 1.42857143; +color: #333; +white-space: nowrap +} + +.dropdown-menu > li > a:hover,.dropdown-menu > li > a:focus { +text-decoration: none; +color: #262626; +background-color: #f5f5f5 +} + +.dropdown-menu > .active > a,.dropdown-menu > .active > a:hover,.dropdown-menu > .active > a:focus { +color: #fff; +text-decoration: none; +outline: 0; +background-color: #337ab7 +} + +.dropdown-menu > .disabled > a,.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus { +color: #777 +} + +.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus { +text-decoration: none; +background-color: transparent; +background-image: none; +filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +cursor: not-allowed +} + +.open > .dropdown-menu { +display: block +} + +.open > a { +outline: 0 +} + +.dropdown-menu-right { +left: auto; +right: 0 +} + +.dropdown-menu-left { +left: 0; +right: auto +} + +.dropdown-header { +display: block; +padding: 3px 20px; +font-size: 12px; +line-height: 1.42857143; +color: #777; +white-space: nowrap +} + +.dropdown-backdrop { +position: fixed; +left: 0; +right: 0; +bottom: 0; +top: 0; +z-index: 990 +} + +.pull-right > .dropdown-menu { +right: 0; +left: auto +} + +.dropup .caret,.navbar-fixed-bottom .dropdown .caret { +border-top: 0; +border-bottom: 4px dashed; +border-bottom: 4px solid \9; +content: "" +} + +.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu { +top: auto; +bottom: 100%; +margin-bottom: 2px +} + +@media (min-width: 768px) { +.navbar-right .dropdown-menu { +left:auto; +right: 0 +} + +.navbar-right .dropdown-menu-left { +left: 0; +right: auto +} +} + +.btn-group,.btn-group-vertical { +position: relative; +display: inline-block; +vertical-align: middle +} + +.btn-group > .btn,.btn-group-vertical > .btn { +position: relative; +float: left +} + +.btn-group > .btn:hover,.btn-group-vertical > .btn:hover,.btn-group > .btn:focus,.btn-group-vertical > .btn:focus,.btn-group > .btn:active,.btn-group-vertical > .btn:active,.btn-group > .btn.active,.btn-group-vertical > .btn.active { +z-index: 2 +} + +.btn-group .btn + .btn,.btn-group .btn + .btn-group,.btn-group .btn-group + .btn,.btn-group .btn-group + .btn-group { +margin-left: -1px +} + +.btn-toolbar { +margin-left: -5px +} + +.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group { +float: left +} + +.btn-toolbar > .btn,.btn-toolbar > .btn-group,.btn-toolbar > .input-group { +margin-left: 5px +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { +border-radius: 0 +} + +.btn-group > .btn:first-child { +margin-left: 0 +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { +border-bottom-right-radius: 0; +border-top-right-radius: 0 +} + +.btn-group > .btn:last-child:not(:first-child),.btn-group > .dropdown-toggle:not(:first-child) { +border-bottom-left-radius: 0; +border-top-left-radius: 0 +} + +.btn-group > .btn-group { +float: left +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { +border-radius: 0 +} + +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { +border-bottom-right-radius: 0; +border-top-right-radius: 0 +} + +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { +border-bottom-left-radius: 0; +border-top-left-radius: 0 +} + +.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle { +outline: 0 +} + +.btn-group > .btn + .dropdown-toggle { +padding-left: 8px; +padding-right: 8px +} + +.btn-group > .btn-lg + .dropdown-toggle { +padding-left: 12px; +padding-right: 12px +} + +.btn-group.open .dropdown-toggle { +-webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,0.125); +box-shadow: inset 0 3px 5px rgba(0,0,0,0.125) +} + +.btn-group.open .dropdown-toggle.btn-link { +-webkit-box-shadow: none; +box-shadow: none +} + +.btn .caret { +margin-left: 0 +} + +.btn-lg .caret { +border-width: 5px 5px 0; +border-bottom-width: 0 +} + +.dropup .btn-lg .caret { +border-width: 0 5px 5px +} + +.btn-group-vertical > .btn,.btn-group-vertical > .btn-group,.btn-group-vertical > .btn-group > .btn { +display: block; +float: none; +width: 100%; +max-width: 100% +} + +.btn-group-vertical > .btn-group > .btn { +float: none +} + +.btn-group-vertical > .btn + .btn,.btn-group-vertical > .btn + .btn-group,.btn-group-vertical > .btn-group + .btn,.btn-group-vertical > .btn-group + .btn-group { +margin-top: -1px; +margin-left: 0 +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { +border-radius: 0 +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { +border-top-right-radius: 4px; +border-bottom-right-radius: 0; +border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { +border-bottom-left-radius: 4px; +border-top-right-radius: 0; +border-top-left-radius: 0 +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { +border-radius: 0 +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { +border-bottom-right-radius: 0; +border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { +border-top-right-radius: 0; +border-top-left-radius: 0 +} + +.btn-group-justified { +display: table; +width: 100%; +table-layout: fixed; +border-collapse: separate +} + +.btn-group-justified > .btn,.btn-group-justified > .btn-group { +float: none; +display: table-cell; +width: 1% +} + +.btn-group-justified > .btn-group .btn { +width: 100% +} + +.btn-group-justified > .btn-group .dropdown-menu { +left: auto +} + +[data-toggle="buttons"] > .btn input[type="radio"],[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],[data-toggle="buttons"] > .btn input[type="checkbox"],[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { +position: absolute; +clip: rect(0,0,0,0); +pointer-events: none +} + +.input-group { +position: relative; +display: table; +border-collapse: separate +} + +.input-group[class*="col-"] { +float: none; +padding-left: 0; +padding-right: 0 +} + +.input-group .form-control { +position: relative; +z-index: 2; +float: left; +width: 100%; +margin-bottom: 0 +} + +.input-group-lg > .form-control,.input-group-lg > .input-group-addon,.input-group-lg > .input-group-btn > .btn { +height: 46px; +padding: 10px 16px; +font-size: 18px; +line-height: 1.3333333; +border-radius: 6px +} + +select.input-group-lg > .form-control,select.input-group-lg > .input-group-addon,select.input-group-lg > .input-group-btn > .btn { +height: 46px; +line-height: 46px +} + +textarea.input-group-lg > .form-control,textarea.input-group-lg > .input-group-addon,textarea.input-group-lg > .input-group-btn > .btn,select[multiple].input-group-lg > .form-control,select[multiple].input-group-lg > .input-group-addon,select[multiple].input-group-lg > .input-group-btn > .btn { +height: auto +} + +.input-group-sm > .form-control,.input-group-sm > .input-group-addon,.input-group-sm > .input-group-btn > .btn { +height: 30px; +padding: 5px 10px; +font-size: 12px; +line-height: 1.5; +border-radius: 3px +} + +select.input-group-sm > .form-control,select.input-group-sm > .input-group-addon,select.input-group-sm > .input-group-btn > .btn { +height: 30px; +line-height: 30px +} + +textarea.input-group-sm > .form-control,textarea.input-group-sm > .input-group-addon,textarea.input-group-sm > .input-group-btn > .btn,select[multiple].input-group-sm > .form-control,select[multiple].input-group-sm > .input-group-addon,select[multiple].input-group-sm > .input-group-btn > .btn { +height: auto +} + +.input-group-addon,.input-group-btn,.input-group .form-control { +display: table-cell +} + +.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child) { +border-radius: 0 +} + +.input-group-addon,.input-group-btn { +width: 1%; +white-space: nowrap; +vertical-align: middle +} + +.input-group-addon { +padding: 6px 12px; +font-size: 14px; +font-weight: 400; +line-height: 1; +color: #555; +text-align: center; +background-color: #eee; +border: 1px solid #ccc; +border-radius: 4px +} + +.input-group-addon.input-sm { +padding: 5px 10px; +font-size: 12px; +border-radius: 3px +} + +.input-group-addon.input-lg { +padding: 10px 16px; +font-size: 18px; +border-radius: 6px +} + +.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"] { +margin-top: 0 +} + +.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group > .btn,.input-group-btn:first-child > .dropdown-toggle,.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { +border-bottom-right-radius: 0; +border-top-right-radius: 0 +} + +.input-group-addon:first-child { +border-right: 0 +} + +.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group > .btn,.input-group-btn:last-child > .dropdown-toggle,.input-group-btn:first-child > .btn:not(:first-child),.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { +border-bottom-left-radius: 0; +border-top-left-radius: 0 +} + +.input-group-addon:last-child { +border-left: 0 +} + +.input-group-btn { +position: relative; +font-size: 0; +white-space: nowrap +} + +.input-group-btn > .btn { +position: relative +} + +.input-group-btn > .btn + .btn { +margin-left: -1px +} + +.input-group-btn > .btn:hover,.input-group-btn > .btn:focus,.input-group-btn > .btn:active { +z-index: 2 +} + +.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group { +margin-right: -1px +} + +.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group { +z-index: 2; +margin-left: -1px +} + +.nav { +margin-bottom: 0; +padding-left: 0; +list-style: none +} + +.nav > li { +position: relative; +display: block +} + +.nav > li > a { +position: relative; +display: block; +padding: 10px 15px +} + +.nav > li > a:hover,.nav > li > a:focus { +text-decoration: none; +background-color: #eee +} + +.nav > li.disabled > a { +color: #777 +} + +.nav > li.disabled > a:hover,.nav > li.disabled > a:focus { +color: #777; +text-decoration: none; +background-color: transparent; +cursor: not-allowed +} + +.nav .open > a,.nav .open > a:hover,.nav .open > a:focus { +background-color: #eee; +border-color: #337ab7 +} + +.nav .nav-divider { +height: 1px; +margin: 9px 0; +overflow: hidden; +background-color: #e5e5e5 +} + +.nav > li > a > img { +max-width: none +} + +.nav-tabs { +border-bottom: 1px solid #ddd +} + +.nav-tabs > li { +float: left; +margin-bottom: -1px +} + +.nav-tabs > li > a { +margin-right: 2px; +line-height: 1.42857143; +border: 1px solid transparent; +border-radius: 4px 4px 0 0 +} + +.nav-tabs > li > a:hover { +border-color: #eee #eee #ddd +} + +.nav-tabs > li.active > a,.nav-tabs > li.active > a:hover,.nav-tabs > li.active > a:focus { +color: #555; +background-color: #fff; +border: 1px solid #ddd; +border-bottom-color: transparent; +cursor: default +} + +.nav-tabs.nav-justified { +width: 100%; +border-bottom: 0 +} + +.nav-tabs.nav-justified > li { +float: none +} + +.nav-tabs.nav-justified > li > a { +text-align: center; +margin-bottom: 5px +} + +.nav-tabs.nav-justified > .dropdown .dropdown-menu { +top: auto; +left: auto +} + +@media (min-width: 768px) { +.nav-tabs.nav-justified > li { +display:table-cell; +width: 1% +} + +.nav-tabs.nav-justified > li > a { +margin-bottom: 0 +} +} + +.nav-tabs.nav-justified > li > a { +margin-right: 0; +border-radius: 4px +} + +.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus { +border: 1px solid #ddd +} + +@media (min-width: 768px) { +.nav-tabs.nav-justified > li > a { +border-bottom:1px solid #ddd; +border-radius: 4px 4px 0 0 +} + +.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus { +border-bottom-color: #fff +} +} + +.nav-pills > li { +float: left +} + +.nav-pills > li > a { +border-radius: 4px +} + +.nav-pills > li + li { +margin-left: 2px +} + +.nav-pills > li.active > a,.nav-pills > li.active > a:hover,.nav-pills > li.active > a:focus { +color: #fff; +background-color: #337ab7 +} + +.nav-stacked > li { +float: none +} + +.nav-stacked > li + li { +margin-top: 2px; +margin-left: 0 +} + +.nav-justified { +width: 100% +} + +.nav-justified > li { +float: none +} + +.nav-justified > li > a { +text-align: center; +margin-bottom: 5px +} + +.nav-justified > .dropdown .dropdown-menu { +top: auto; +left: auto +} + +@media (min-width: 768px) { +.nav-justified > li { +display:table-cell; +width: 1% +} + +.nav-justified > li > a { +margin-bottom: 0 +} +} + +.nav-tabs-justified { +border-bottom: 0 +} + +.nav-tabs-justified > li > a { +margin-right: 0; +border-radius: 4px +} + +.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus { +border: 1px solid #ddd +} + +@media (min-width: 768px) { +.nav-tabs-justified > li > a { +border-bottom:1px solid #ddd; +border-radius: 4px 4px 0 0 +} + +.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus { +border-bottom-color: #fff +} +} + +.tab-content > .tab-pane { +display: none +} + +.tab-content > .active { +display: block +} + +.nav-tabs .dropdown-menu { +margin-top: -1px; +border-top-right-radius: 0; +border-top-left-radius: 0 +} + +.navbar { +position: relative; +min-height: 50px; +margin-bottom: 20px; +border: 1px solid transparent +} + +@media (min-width: 768px) { +.navbar { +border-radius:4px +} +} + +@media (min-width: 768px) { +.navbar-header { +float:left +} +} + +.navbar-collapse { +overflow-x: visible; +padding-right: 15px; +padding-left: 15px; +border-top: 1px solid transparent; +-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.1); +box-shadow: inset 0 1px 0 rgba(255,255,255,0.1); +-webkit-overflow-scrolling: touch +} + +.navbar-collapse.in { +overflow-y: auto +} + +@media (min-width: 768px) { +.navbar-collapse { +width:auto; +border-top: 0; +-webkit-box-shadow: none; +box-shadow: none +} + +.navbar-collapse.collapse { +display: block!important; +height: auto!important; +padding-bottom: 0; +overflow: visible!important +} + +.navbar-collapse.in { +overflow-y: visible +} + +.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse { +padding-left: 0; +padding-right: 0 +} +} + +.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse { +max-height: 340px +} + +@media (max-device-width: 480px) and (orientation: landscape) { +.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse { +max-height:200px +} +} + +.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse { +margin-right: -15px; +margin-left: -15px +} + +@media (min-width: 768px) { +.container > .navbar-header,.container-fluid > .navbar-header,.container > .navbar-collapse,.container-fluid > .navbar-collapse { +margin-right:0; +margin-left: 0 +} +} + +.navbar-static-top { +z-index: 1000; +border-width: 0 0 1px +} + +@media (min-width: 768px) { +.navbar-static-top { +border-radius:0 +} +} + +.navbar-fixed-top,.navbar-fixed-bottom { +position: fixed; +right: 0; +left: 0; +z-index: 1030 +} + +@media (min-width: 768px) { +.navbar-fixed-top,.navbar-fixed-bottom { +border-radius:0 +} +} + +.navbar-fixed-top { +top: 0; +border-width: 0 0 1px +} + +.navbar-fixed-bottom { +bottom: 0; +margin-bottom: 0; +border-width: 1px 0 0 +} + +.navbar-brand { +float: left; +padding: 15px; +font-size: 18px; +line-height: 20px; +height: 50px +} + +.navbar-brand:hover,.navbar-brand:focus { +text-decoration: none +} + +.navbar-brand > img { +display: block +} + +@media (min-width: 768px) { +.navbar > .container .navbar-brand,.navbar > .container-fluid .navbar-brand { +margin-left:-15px +} +} + +.navbar-toggle { +position: relative; +float: right; +margin-right: 15px; +padding: 9px 10px; +margin-top: 8px; +margin-bottom: 8px; +background-color: transparent; +background-image: none; +border: 1px solid transparent; +border-radius: 4px +} + +.navbar-toggle:focus { +outline: 0 +} + +.navbar-toggle .icon-bar { +display: block; +width: 22px; +height: 2px; +border-radius: 1px +} + +.navbar-toggle .icon-bar + .icon-bar { +margin-top: 4px +} + +@media (min-width: 768px) { +.navbar-toggle { +display:none +} +} + +.navbar-nav { +margin: 7.5px -15px +} + +.navbar-nav > li > a { +padding-top: 10px; +padding-bottom: 10px; +line-height: 20px +} + +@media (max-width: 767px) { +.navbar-nav .open .dropdown-menu { +position:static; +float: none; +width: auto; +margin-top: 0; +background-color: transparent; +border: 0; +-webkit-box-shadow: none; +box-shadow: none +} + +.navbar-nav .open .dropdown-menu > li > a,.navbar-nav .open .dropdown-menu .dropdown-header { +padding: 5px 15px 5px 25px +} + +.navbar-nav .open .dropdown-menu > li > a { +line-height: 20px +} + +.navbar-nav .open .dropdown-menu > li > a:hover,.navbar-nav .open .dropdown-menu > li > a:focus { +background-image: none +} +} + +@media (min-width: 768px) { +.navbar-nav { +float:left; +margin: 0 +} + +.navbar-nav > li { +float: left +} + +.navbar-nav > li > a { +padding-top: 15px; +padding-bottom: 15px +} +} + +.navbar-form { +padding: 10px 15px; +border-top: 1px solid transparent; +border-bottom: 1px solid transparent; +-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1); +box-shadow: inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1); +margin: 8px -15px +} + +@media (min-width: 768px) { +.navbar-form .form-group { +display:inline-block; +margin-bottom: 0; +vertical-align: middle +} + +.navbar-form .form-control { +display: inline-block; +width: auto; +vertical-align: middle +} + +.navbar-form .form-control-static { +display: inline-block +} + +.navbar-form .input-group { +display: inline-table; +vertical-align: middle +} + +.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control { +width: auto +} + +.navbar-form .input-group > .form-control { +width: 100% +} + +.navbar-form .control-label { +margin-bottom: 0; +vertical-align: middle +} + +.navbar-form .radio,.navbar-form .checkbox { +display: inline-block; +margin-top: 0; +margin-bottom: 0; +vertical-align: middle +} + +.navbar-form .radio label,.navbar-form .checkbox label { +padding-left: 0 +} + +.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"] { +position: relative; +margin-left: 0 +} + +.navbar-form .has-feedback .form-control-feedback { +top: 0 +} +} + +@media (max-width: 767px) { +.navbar-form .form-group { +margin-bottom:5px +} + +.navbar-form .form-group:last-child { +margin-bottom: 0 +} +} + +@media (min-width: 768px) { +.navbar-form { +width:auto; +border: 0; +margin-left: 0; +margin-right: 0; +padding-top: 0; +padding-bottom: 0; +-webkit-box-shadow: none; +box-shadow: none +} +} + +.navbar-nav > li > .dropdown-menu { +margin-top: 0; +border-top-right-radius: 0; +border-top-left-radius: 0 +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { +margin-bottom: 0; +border-top-right-radius: 4px; +border-top-left-radius: 4px; +border-bottom-right-radius: 0; +border-bottom-left-radius: 0 +} + +.navbar-btn { +margin-top: 8px; +margin-bottom: 8px +} + +.navbar-btn.btn-sm { +margin-top: 10px; +margin-bottom: 10px +} + +.navbar-btn.btn-xs { +margin-top: 14px; +margin-bottom: 14px +} + +.navbar-text { +margin-top: 15px; +margin-bottom: 15px +} + +@media (min-width: 768px) { +.navbar-text { +float:left; +margin-left: 15px; +margin-right: 15px +} +} + +@media (min-width: 768px) { +.navbar-left { +float:left!important +} + +.navbar-right { +float: right!important; +margin-right: -15px +} + +.navbar-right ~ .navbar-right { +margin-right: 0 +} +} + +.navbar-default { +background-color: #f8f8f8; +border-color: #e7e7e7 +} + +.navbar-default .navbar-brand { +color: #777 +} + +.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus { +color: #5e5e5e; +background-color: transparent +} + +.navbar-default .navbar-text { +color: #777 +} + +.navbar-default .navbar-nav > li > a { +color: #777 +} + +.navbar-default .navbar-nav > li > a:hover,.navbar-default .navbar-nav > li > a:focus { +color: #333; +background-color: transparent +} + +.navbar-default .navbar-nav > .active > a,.navbar-default .navbar-nav > .active > a:hover,.navbar-default .navbar-nav > .active > a:focus { +color: #555; +background-color: #e7e7e7 +} + +.navbar-default .navbar-nav > .disabled > a,.navbar-default .navbar-nav > .disabled > a:hover,.navbar-default .navbar-nav > .disabled > a:focus { +color: #ccc; +background-color: transparent +} + +.navbar-default .navbar-toggle { +border-color: #ddd +} + +.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus { +background-color: #ddd +} + +.navbar-default .navbar-toggle .icon-bar { +background-color: #888 +} + +.navbar-default .navbar-collapse,.navbar-default .navbar-form { +border-color: #e7e7e7 +} + +.navbar-default .navbar-nav > .open > a,.navbar-default .navbar-nav > .open > a:hover,.navbar-default .navbar-nav > .open > a:focus { +background-color: #e7e7e7; +color: #555 +} + +@media (max-width: 767px) { +.navbar-default .navbar-nav .open .dropdown-menu > li > a { +color:#777 +} + +.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { +color: #333; +background-color: transparent +} + +.navbar-default .navbar-nav .open .dropdown-menu > .active > a,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { +color: #555; +background-color: #e7e7e7 +} + +.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { +color: #ccc; +background-color: transparent +} +} + +.navbar-default .navbar-link { +color: #777 +} + +.navbar-default .navbar-link:hover { +color: #333 +} + +.navbar-default .btn-link { +color: #777 +} + +.navbar-default .btn-link:hover,.navbar-default .btn-link:focus { +color: #333 +} + +.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus { +color: #ccc +} + +.navbar-inverse { +background-color: #222; +border-color: #080808 +} + +.navbar-inverse .navbar-brand { +color: #9d9d9d +} + +.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus { +color: #fff; +background-color: transparent +} + +.navbar-inverse .navbar-text { +color: #9d9d9d +} + +.navbar-inverse .navbar-nav > li > a { +color: #9d9d9d +} + +.navbar-inverse .navbar-nav > li > a:hover,.navbar-inverse .navbar-nav > li > a:focus { +color: #fff; +background-color: transparent +} + +.navbar-inverse .navbar-nav > .active > a,.navbar-inverse .navbar-nav > .active > a:hover,.navbar-inverse .navbar-nav > .active > a:focus { +color: #fff; +background-color: #080808 +} + +.navbar-inverse .navbar-nav > .disabled > a,.navbar-inverse .navbar-nav > .disabled > a:hover,.navbar-inverse .navbar-nav > .disabled > a:focus { +color: #444; +background-color: transparent +} + +.navbar-inverse .navbar-toggle { +border-color: #333 +} + +.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus { +background-color: #333 +} + +.navbar-inverse .navbar-toggle .icon-bar { +background-color: #fff +} + +.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form { +border-color: #101010 +} + +.navbar-inverse .navbar-nav > .open > a,.navbar-inverse .navbar-nav > .open > a:hover,.navbar-inverse .navbar-nav > .open > a:focus { +background-color: #080808; +color: #fff +} + +@media (max-width: 767px) { +.navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { +border-color:#080808 +} + +.navbar-inverse .navbar-nav .open .dropdown-menu .divider { +background-color: #080808 +} + +.navbar-inverse .navbar-nav .open .dropdown-menu > li > a { +color: #9d9d9d +} + +.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { +color: #fff; +background-color: transparent +} + +.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { +color: #fff; +background-color: #080808 +} + +.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { +color: #444; +background-color: transparent +} +} + +.navbar-inverse .navbar-link { +color: #9d9d9d +} + +.navbar-inverse .navbar-link:hover { +color: #fff +} + +.navbar-inverse .btn-link { +color: #9d9d9d +} + +.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus { +color: #fff +} + +.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus { +color: #444 +} + +.breadcrumb { +padding: 8px 15px; +margin-bottom: 20px; +list-style: none; +border-radius: 4px; +background: #fff!important +} + +.breadcrumb > li { +display: inline-block +} + +.breadcrumb > li + li:before { +content: "/\00a0"; +padding: 0 5px; +color: #ccc +} + +.breadcrumb > .active { +color: #777 +} + +.pagination { +display: inline-block; +padding-left: 0; +margin: 20px 0; +border-radius: 4px +} + +.pagination > li { +display: inline +} + +.pagination > li > a,.pagination > li > span { +position: relative; +float: left; +padding: 6px 12px; +line-height: 1.42857143; +text-decoration: none; +color: #337ab7; +background-color: #fff; +border: 1px solid #ddd; +margin-left: -1px +} + +.pagination > li:first-child > a,.pagination > li:first-child > span { +margin-left: 0; +border-bottom-left-radius: 4px; +border-top-left-radius: 4px +} + +.pagination > li:last-child > a,.pagination > li:last-child > span { +border-bottom-right-radius: 4px; +border-top-right-radius: 4px +} + +.pagination > li > a:hover,.pagination > li > span:hover,.pagination > li > a:focus,.pagination > li > span:focus { +z-index: 3; +color: #23527c; +background-color: #eee; +border-color: #ddd +} + +.pagination > .active > a,.pagination > .active > span,.pagination > .active > a:hover,.pagination > .active > span:hover,.pagination > .active > a:focus,.pagination > .active > span:focus { +z-index: 2; +color: #fff; +background-color: #337ab7; +border-color: #337ab7; +cursor: default +} + +.pagination > .disabled > span,.pagination > .disabled > span:hover,.pagination > .disabled > span:focus,.pagination > .disabled > a,.pagination > .disabled > a:hover,.pagination > .disabled > a:focus { +color: #777; +background-color: #fff; +border-color: #ddd; +cursor: not-allowed +} + +.pagination-lg > li > a,.pagination-lg > li > span { +padding: 10px 16px; +font-size: 18px; +line-height: 1.3333333 +} + +.pagination-lg > li:first-child > a,.pagination-lg > li:first-child > span { +border-bottom-left-radius: 6px; +border-top-left-radius: 6px +} + +.pagination-lg > li:last-child > a,.pagination-lg > li:last-child > span { +border-bottom-right-radius: 6px; +border-top-right-radius: 6px +} + +.pagination-sm > li > a,.pagination-sm > li > span { +padding: 5px 10px; +font-size: 12px; +line-height: 1.5 +} + +.pagination-sm > li:first-child > a,.pagination-sm > li:first-child > span { +border-bottom-left-radius: 3px; +border-top-left-radius: 3px +} + +.pagination-sm > li:last-child > a,.pagination-sm > li:last-child > span { +border-bottom-right-radius: 3px; +border-top-right-radius: 3px +} + +.pager { +padding-left: 0; +margin: 20px 0; +list-style: none; +text-align: center +} + +.pager li { +display: inline +} + +.pager li > a,.pager li > span { +display: inline-block; +padding: 5px 14px; +background-color: #fff; +border: 1px solid #ddd; +border-radius: 15px +} + +.pager li > a:hover,.pager li > a:focus { +text-decoration: none; +background-color: #eee +} + +.pager .next > a,.pager .next > span { +float: right +} + +.pager .previous > a,.pager .previous > span { +float: left +} + +.pager .disabled > a,.pager .disabled > a:hover,.pager .disabled > a:focus,.pager .disabled > span { +color: #777; +background-color: #fff; +cursor: not-allowed +} + +.label { +display: inline; +padding: .2em .6em .3em; +font-size: 75%; +font-weight: 700; +line-height: 1; +color: #fff; +text-align: center; +white-space: nowrap; +vertical-align: baseline; +border-radius: .25em +} + +a.label:hover,a.label:focus { +color: #fff; +text-decoration: none; +cursor: pointer +} + +.label:empty { +display: none +} + +.btn .label { +position: relative; +top: -1px +} + +.label-default { +background-color: #777 +} + +.label-default[href]:hover,.label-default[href]:focus { +background-color: #5e5e5e +} + +.label-primary { +background-color: #337ab7 +} + +.label-primary[href]:hover,.label-primary[href]:focus { +background-color: #286090 +} + +.label-success { +background-color: #5cb85c +} + +.label-success[href]:hover,.label-success[href]:focus { +background-color: #449d44 +} + +.label-info { +background-color: #5bc0de +} + +.label-info[href]:hover,.label-info[href]:focus { +background-color: #31b0d5 +} + +.label-warning { +background-color: #f0ad4e +} + +.label-warning[href]:hover,.label-warning[href]:focus { +background-color: #ec971f +} + +.label-danger { +background-color: #d9534f +} + +.label-danger[href]:hover,.label-danger[href]:focus { +background-color: #c9302c +} + +.badge { +display: inline-block; +min-width: 10px; +padding: 3px 7px; +font-size: 12px; +font-weight: 700; +color: #fff; +line-height: 1; +vertical-align: middle; +white-space: nowrap; +text-align: center; +background-color: #777; +border-radius: 10px +} + +.badge:empty { +display: none +} + +.btn .badge { +position: relative; +top: -1px +} + +.btn-xs .badge,.btn-group-xs > .btn .badge { +top: 0; +padding: 1px 5px +} + +a.badge:hover,a.badge:focus { +color: #fff; +text-decoration: none; +cursor: pointer +} + +.list-group-item.active > .badge,.nav-pills > .active > a > .badge { +color: #337ab7; +background-color: #fff +} + +.list-group-item > .badge { +float: right +} + +.list-group-item > .badge + .badge { +margin-right: 5px +} + +.nav-pills > li > a > .badge { +margin-left: 3px +} + +.jumbotron { +padding-top: 30px; +padding-bottom: 30px; +margin-bottom: 30px; +color: inherit; +background-color: #eee +} + +.jumbotron h1,.jumbotron .h1 { +color: inherit +} + +.jumbotron p { +margin-bottom: 15px; +font-size: 21px; +font-weight: 200 +} + +.jumbotron > hr { +border-top-color: #d5d5d5 +} + +.container .jumbotron,.container-fluid .jumbotron { +border-radius: 6px +} + +.jumbotron .container { +max-width: 100% +} + +@media screen and (min-width: 768px) { +.jumbotron { +padding-top:48px; +padding-bottom: 48px +} + +.container .jumbotron,.container-fluid .jumbotron { +padding-left: 60px; +padding-right: 60px +} + +.jumbotron h1,.jumbotron .h1 { +font-size: 63px +} +} + +.thumbnail { +display: block; +padding: 4px; +margin-bottom: 20px; +line-height: 1.42857143; +background-color: #fff; +border: 1px solid #ddd; +border-radius: 4px; +-webkit-transition: border .2s ease-in-out; +-o-transition: border .2s ease-in-out; +transition: border .2s ease-in-out +} + +.thumbnail > img,.thumbnail a > img { +margin-left: auto; +margin-right: auto +} + +a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active { +border-color: #337ab7 +} + +.thumbnail .caption { +padding: 9px; +color: #333 +} + +.alert { +padding: 15px; +margin-bottom: 20px; +border: 1px solid transparent; +border-radius: 4px +} + +.alert h4 { +margin-top: 0; +color: inherit +} + +.alert .alert-link { +font-weight: 700 +} + +.alert > p,.alert > ul { +margin-bottom: 0 +} + +.alert > p + p { +margin-top: 5px +} + +.alert-dismissable,.alert-dismissible { +padding-right: 35px +} + +.alert-dismissable .close,.alert-dismissible .close { +position: relative; +top: -2px; +right: -21px; +color: inherit +} + +.alert-success { +background-color: #dff0d8; +border-color: #d6e9c6; +color: #3c763d +} + +.alert-success hr { +border-top-color: #c9e2b3 +} + +.alert-success .alert-link { +color: #2b542c +} + +.alert-info { +background-color: #d9edf7; +border-color: #bce8f1; +color: #31708f +} + +.alert-info hr { +border-top-color: #a6e1ec +} + +.alert-info .alert-link { +color: #245269 +} + +.alert-warning { +background-color: #fcf8e3; +border-color: #faebcc; +color: #8a6d3b +} + +.alert-warning hr { +border-top-color: #f7e1b5 +} + +.alert-warning .alert-link { +color: #66512c +} + +.alert-danger { +background-color: #f2dede; +border-color: #ebccd1; +color: #a94442 +} + +.alert-danger hr { +border-top-color: #e4b9c0 +} + +.alert-danger .alert-link { +color: #843534 +} + +@-webkit-keyframes progress-bar-stripes { +from { +background-position: 40px 0 +} + +to { +background-position: 0 0 +} +} + +@-o-keyframes progress-bar-stripes { +from { +background-position: 40px 0 +} + +to { +background-position: 0 0 +} +} + +@keyframes progress-bar-stripes { +from { +background-position: 40px 0 +} + +to { +background-position: 0 0 +} +} + +.progress { +overflow: hidden; +height: 20px; +margin-bottom: 20px; +background-color: #f5f5f5; +border-radius: 4px; +-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); +box-shadow: inset 0 1px 2px rgba(0,0,0,0.1) +} + +.progress-bar { +float: left; +width: 0; +height: 100%; +font-size: 12px; +line-height: 20px; +color: #fff; +text-align: center; +background-color: #337ab7; +-webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15); +box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15); +-webkit-transition: width .6s ease; +-o-transition: width .6s ease; +transition: width .6s ease +} + +.progress-striped .progress-bar,.progress-bar-striped { +background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); +background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); +background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); +-webkit-background-size: 40px 40px; +background-size: 40px 40px +} + +.progress.active .progress-bar,.progress-bar.active { +-webkit-animation: progress-bar-stripes 2s linear infinite; +-o-animation: progress-bar-stripes 2s linear infinite; +animation: progress-bar-stripes 2s linear infinite +} + +.progress-bar-success { +background-color: #5cb85c +} + +.progress-striped .progress-bar-success { +background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); +background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); +background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent) +} + +.progress-bar-info { +background-color: #5bc0de +} + +.progress-striped .progress-bar-info { +background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); +background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); +background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent) +} + +.progress-bar-warning { +background-color: #f0ad4e +} + +.progress-striped .progress-bar-warning { +background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); +background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); +background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent) +} + +.progress-bar-danger { +background-color: #d9534f +} + +.progress-striped .progress-bar-danger { +background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); +background-image: -o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); +background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent) +} + +.media { +margin-top: 15px +} + +.media:first-child { +margin-top: 0 +} + +.media,.media-body { +zoom:1;overflow: hidden +} + +.media-body { +width: 10000px +} + +.media-object { +display: block +} + +.media-object.img-thumbnail { +max-width: none +} + +.media-right,.media > .pull-right { +padding-left: 10px +} + +.media-left,.media > .pull-left { +padding-right: 10px +} + +.media-left,.media-right,.media-body { +display: table-cell; +vertical-align: top +} + +.media-middle { +vertical-align: middle +} + +.media-bottom { +vertical-align: bottom +} + +.media-heading { +margin-top: 0; +margin-bottom: 5px +} + +.media-list { +padding-left: 0; +list-style: none +} + +.list-group { +margin-bottom: 20px; +padding-left: 0 +} + +.list-group-item { +position: relative; +display: block; +padding: 10px 15px; +margin-bottom: -1px; +background-color: #fff; +border: 1px solid #ddd +} + +.list-group-item:first-child { +border-top-right-radius: 4px; +border-top-left-radius: 4px +} + +.list-group-item:last-child { +margin-bottom: 0; +border-bottom-right-radius: 4px; +border-bottom-left-radius: 4px +} + +a.list-group-item,button.list-group-item { +color: #555 +} + +a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading { +color: #333 +} + +a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus { +text-decoration: none; +color: #555; +background-color: #f5f5f5 +} + +button.list-group-item { +width: 100%; +text-align: left +} + +.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus { +background-color: #eee; +color: #777; +cursor: not-allowed +} + +.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading { +color: inherit +} + +.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text { +color: #777 +} + +.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus { +z-index: 2; +color: #fff; +background-color: #337ab7; +border-color: #337ab7 +} + +.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading > small,.list-group-item.active:hover .list-group-item-heading > small,.list-group-item.active:focus .list-group-item-heading > small,.list-group-item.active .list-group-item-heading > .small,.list-group-item.active:hover .list-group-item-heading > .small,.list-group-item.active:focus .list-group-item-heading > .small { +color: inherit +} + +.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text { +color: #c7ddef +} + +.list-group-item-success { +color: #3c763d; +background-color: #dff0d8 +} + +a.list-group-item-success,button.list-group-item-success { +color: #3c763d +} + +a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading { +color: inherit +} + +a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus { +color: #3c763d; +background-color: #d0e9c6 +} + +a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus { +color: #fff; +background-color: #3c763d; +border-color: #3c763d +} + +.list-group-item-info { +color: #31708f; +background-color: #d9edf7 +} + +a.list-group-item-info,button.list-group-item-info { +color: #31708f +} + +a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading { +color: inherit +} + +a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus { +color: #31708f; +background-color: #c4e3f3 +} + +a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus { +color: #fff; +background-color: #31708f; +border-color: #31708f +} + +.list-group-item-warning { +color: #8a6d3b; +background-color: #fcf8e3 +} + +a.list-group-item-warning,button.list-group-item-warning { +color: #8a6d3b +} + +a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading { +color: inherit +} + +a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus { +color: #8a6d3b; +background-color: #faf2cc +} + +a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus { +color: #fff; +background-color: #8a6d3b; +border-color: #8a6d3b +} + +.list-group-item-danger { +color: #a94442; +background-color: #f2dede +} + +a.list-group-item-danger,button.list-group-item-danger { +color: #a94442 +} + +a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading { +color: inherit +} + +a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus { +color: #a94442; +background-color: #ebcccc +} + +a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus { +color: #fff; +background-color: #a94442; +border-color: #a94442 +} + +.list-group-item-heading { +margin-top: 0; +margin-bottom: 5px +} + +.list-group-item-text { +margin-bottom: 0; +line-height: 1.3 +} + +.panel { +margin-bottom: 20px; +background-color: #fff; +border: 1px solid transparent; +border-radius: 4px; +-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.05); +box-shadow: 0 1px 1px rgba(0,0,0,0.05) +} + +.panel-body { +padding: 15px +} + +.panel-heading { +padding: 10px 15px; +border-bottom: 1px solid transparent; +border-top-right-radius: 3px; +border-top-left-radius: 3px +} + +.panel-heading > .dropdown .dropdown-toggle { +color: inherit +} + +.panel-title { +margin-top: 0; +margin-bottom: 0; +font-size: 16px; +color: inherit +} + +.panel-title > a,.panel-title > small,.panel-title > .small,.panel-title > small > a,.panel-title > .small > a { +color: inherit +} + +.panel-footer { +padding: 10px 15px; +background-color: #f5f5f5; +border-top: 1px solid #ddd; +border-bottom-right-radius: 3px; +border-bottom-left-radius: 3px +} + +.panel > .list-group,.panel > .panel-collapse > .list-group { +margin-bottom: 0 +} + +.panel > .list-group .list-group-item,.panel > .panel-collapse > .list-group .list-group-item { +border-width: 1px 0; +border-radius: 0 +} + +.panel > .list-group:first-child .list-group-item:first-child,.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { +border-top: 0; +border-top-right-radius: 3px; +border-top-left-radius: 3px +} + +.panel > .list-group:last-child .list-group-item:last-child,.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { +border-bottom: 0; +border-bottom-right-radius: 3px; +border-bottom-left-radius: 3px +} + +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { +border-top-right-radius: 0; +border-top-left-radius: 0 +} + +.panel-heading + .list-group .list-group-item:first-child { +border-top-width: 0 +} + +.list-group + .panel-footer { +border-top-width: 0 +} + +.panel > .table,.panel > .table-responsive > .table,.panel > .panel-collapse > .table { +margin-bottom: 0 +} + +.panel > .table caption,.panel > .table-responsive > .table caption,.panel > .panel-collapse > .table caption { +padding-left: 15px; +padding-right: 15px +} + +.panel > .table:first-child,.panel > .table-responsive:first-child > .table:first-child { +border-top-right-radius: 3px; +border-top-left-radius: 3px +} + +.panel > .table:first-child > thead:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { +border-top-left-radius: 3px; +border-top-right-radius: 3px +} + +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { +border-top-left-radius: 3px +} + +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { +border-top-right-radius: 3px +} + +.panel > .table:last-child,.panel > .table-responsive:last-child > .table:last-child { +border-bottom-right-radius: 3px; +border-bottom-left-radius: 3px +} + +.panel > .table:last-child > tbody:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { +border-bottom-left-radius: 3px; +border-bottom-right-radius: 3px +} + +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { +border-bottom-left-radius: 3px +} + +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { +border-bottom-right-radius: 3px +} + +.panel > .panel-body + .table,.panel > .panel-body + .table-responsive,.panel > .table + .panel-body,.panel > .table-responsive + .panel-body { +border-top: 1px solid #ddd +} + +.panel > .table > tbody:first-child > tr:first-child th,.panel > .table > tbody:first-child > tr:first-child td { +border-top: 0 +} + +.panel > .table-bordered,.panel > .table-responsive > .table-bordered { +border: 0 +} + +.panel > .table-bordered > thead > tr > th:first-child,.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,.panel > .table-bordered > tbody > tr > th:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,.panel > .table-bordered > tfoot > tr > th:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,.panel > .table-bordered > thead > tr > td:first-child,.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,.panel > .table-bordered > tbody > tr > td:first-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,.panel > .table-bordered > tfoot > tr > td:first-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { +border-left: 0 +} + +.panel > .table-bordered > thead > tr > th:last-child,.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,.panel > .table-bordered > tbody > tr > th:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,.panel > .table-bordered > tfoot > tr > th:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,.panel > .table-bordered > thead > tr > td:last-child,.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,.panel > .table-bordered > tbody > tr > td:last-child,.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,.panel > .table-bordered > tfoot > tr > td:last-child,.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { +border-right: 0 +} + +.panel > .table-bordered > thead > tr:first-child > td,.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,.panel > .table-bordered > tbody > tr:first-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,.panel > .table-bordered > thead > tr:first-child > th,.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,.panel > .table-bordered > tbody > tr:first-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { +border-bottom: 0 +} + +.panel > .table-bordered > tbody > tr:last-child > td,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,.panel > .table-bordered > tfoot > tr:last-child > td,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,.panel > .table-bordered > tbody > tr:last-child > th,.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,.panel > .table-bordered > tfoot > tr:last-child > th,.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { +border-bottom: 0 +} + +.panel > .table-responsive { +border: 0; +margin-bottom: 0 +} + +.panel-group { +margin-bottom: 20px +} + +.panel-group .panel { +margin-bottom: 0; +border-radius: 4px +} + +.panel-group .panel + .panel { +margin-top: 5px +} + +.panel-group .panel-heading { +border-bottom: 0 +} + +.panel-group .panel-heading + .panel-collapse > .panel-body,.panel-group .panel-heading + .panel-collapse > .list-group { +border-top: 1px solid #ddd +} + +.panel-group .panel-footer { +border-top: 0 +} + +.panel-group .panel-footer + .panel-collapse .panel-body { +border-bottom: 1px solid #ddd +} + +.panel-default { +border-color: #ddd +} + +.panel-default > .panel-heading { +color: #333; +background-color: #f5f5f5; +border-color: #ddd +} + +.panel-default > .panel-heading + .panel-collapse > .panel-body { +border-top-color: #ddd +} + +.panel-default > .panel-heading .badge { +color: #f5f5f5; +background-color: #333 +} + +.panel-default > .panel-footer + .panel-collapse > .panel-body { +border-bottom-color: #ddd +} + +.panel-primary { +border-color: #337ab7 +} + +.panel-primary > .panel-heading { +color: #fff; +background-color: #337ab7; +border-color: #337ab7 +} + +.panel-primary > .panel-heading + .panel-collapse > .panel-body { +border-top-color: #337ab7 +} + +.panel-primary > .panel-heading .badge { +color: #337ab7; +background-color: #fff +} + +.panel-primary > .panel-footer + .panel-collapse > .panel-body { +border-bottom-color: #337ab7 +} + +.panel-success { +border-color: #d6e9c6 +} + +.panel-success > .panel-heading { +color: #3c763d; +background-color: #dff0d8; +border-color: #d6e9c6 +} + +.panel-success > .panel-heading + .panel-collapse > .panel-body { +border-top-color: #d6e9c6 +} + +.panel-success > .panel-heading .badge { +color: #dff0d8; +background-color: #3c763d +} + +.panel-success > .panel-footer + .panel-collapse > .panel-body { +border-bottom-color: #d6e9c6 +} + +.panel-info { +border-color: #bce8f1 +} + +.panel-info > .panel-heading { +color: #31708f; +background-color: #d9edf7; +border-color: #bce8f1 +} + +.panel-info > .panel-heading + .panel-collapse > .panel-body { +border-top-color: #bce8f1 +} + +.panel-info > .panel-heading .badge { +color: #d9edf7; +background-color: #31708f +} + +.panel-info > .panel-footer + .panel-collapse > .panel-body { +border-bottom-color: #bce8f1 +} + +.panel-warning { +border-color: #faebcc +} + +.panel-warning > .panel-heading { +color: #8a6d3b; +background-color: #fcf8e3; +border-color: #faebcc +} + +.panel-warning > .panel-heading + .panel-collapse > .panel-body { +border-top-color: #faebcc +} + +.panel-warning > .panel-heading .badge { +color: #fcf8e3; +background-color: #8a6d3b +} + +.panel-warning > .panel-footer + .panel-collapse > .panel-body { +border-bottom-color: #faebcc +} + +.panel-danger { +border-color: #ebccd1 +} + +.panel-danger > .panel-heading { +color: #a94442; +background-color: #f2dede; +border-color: #ebccd1 +} + +.panel-danger > .panel-heading + .panel-collapse > .panel-body { +border-top-color: #ebccd1 +} + +.panel-danger > .panel-heading .badge { +color: #f2dede; +background-color: #a94442 +} + +.panel-danger > .panel-footer + .panel-collapse > .panel-body { +border-bottom-color: #ebccd1 +} + +.embed-responsive { +position: relative; +display: block; +height: 0; +padding: 0; +overflow: hidden +} + +.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video { +position: absolute; +top: 0; +left: 0; +bottom: 0; +height: 100%; +width: 100%; +border: 0 +} + +.embed-responsive-16by9 { +padding-bottom: 56.25% +} + +.embed-responsive-4by3 { +padding-bottom: 75% +} + +.well { +min-height: 20px; +padding: 19px; +margin-bottom: 20px; +background-color: #f5f5f5; +border: 1px solid #e3e3e3; +border-radius: 4px; +-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05); +box-shadow: inset 0 1px 1px rgba(0,0,0,0.05) +} + +.well blockquote { +border-color: #ddd; +border-color: rgba(0,0,0,0.15) +} + +.well-lg { +padding: 24px; +border-radius: 6px +} + +.well-sm { +padding: 9px; +border-radius: 3px +} + +.close { +float: right; +font-size: 21px; +font-weight: 700; +line-height: 1; +color: #000; +text-shadow: 0 1px 0 #fff; +opacity: .2; +filter: alpha(opacity=20) +} + +.close:hover,.close:focus { +color: #000; +text-decoration: none; +cursor: pointer; +opacity: .5; +filter: alpha(opacity=50) +} + +button.close { +padding: 0; +cursor: pointer; +background: transparent; +border: 0; +-webkit-appearance: none +} + +.modal-open { +overflow: hidden +} + +.modal { +display: none; +overflow: hidden; +position: fixed; +top: 0; +right: 0; +bottom: 0; +left: 0; +z-index: 1050; +-webkit-overflow-scrolling: touch; +outline: 0 +} + +.modal.fade .modal-dialog { +-webkit-transform: translate(0,-25%); +-ms-transform: translate(0,-25%); +-o-transform: translate(0,-25%); +transform: translate(0,-25%); +-webkit-transition: -webkit-transform .3s ease-out; +-o-transition: -o-transform .3s ease-out; +transition: transform .3s ease-out +} + +.modal.in .modal-dialog { +-webkit-transform: translate(0,0); +-ms-transform: translate(0,0); +-o-transform: translate(0,0); +transform: translate(0,0) +} + +.modal-open .modal { +overflow-x: hidden; +overflow-y: auto +} + +.modal-dialog { +position: relative; +width: auto; +margin: 10px +} + +.modal-content { +position: relative; +background-color: #fff; +border: 1px solid #999; +border: 1px solid rgba(0,0,0,0.2); +border-radius: 6px; +-webkit-box-shadow: 0 3px 9px rgba(0,0,0,0.5); +box-shadow: 0 3px 9px rgba(0,0,0,0.5); +-webkit-background-clip: padding-box; +background-clip: padding-box; +outline: 0 +} + +.modal-backdrop { +position: fixed; +top: 0; +right: 0; +bottom: 0; +left: 0; +z-index: 1040; +background-color: #000 +} + +.modal-backdrop.fade { +opacity: 0; +filter: alpha(opacity=0) +} + +.modal-backdrop.in { +opacity: .5; +filter: alpha(opacity=50) +} + +.modal-header { +padding: 15px; +border-bottom: 1px solid #e5e5e5; +min-height: 16.42857143px +} + +.modal-header .close { +margin-top: -2px +} + +.modal-title { +margin: 0; +line-height: 1.42857143 +} + +.modal-body { +position: relative; +padding: 15px +} + +.modal-footer { +padding: 15px; +text-align: right; +border-top: 1px solid #e5e5e5 +} + +.modal-footer .btn + .btn { +margin-left: 5px; +margin-bottom: 0 +} + +.modal-footer .btn-group .btn + .btn { +margin-left: -1px +} + +.modal-footer .btn-block + .btn-block { +margin-left: 0 +} + +.modal-scrollbar-measure { +position: absolute; +top: -9999px; +width: 50px; +height: 50px; +overflow: scroll +} + +@media (min-width: 768px) { +.modal-dialog { +width:600px; +margin: 30px auto +} + +.modal-content { +-webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.5); +box-shadow: 0 5px 15px rgba(0,0,0,0.5) +} + +.modal-sm { +width: 300px +} +} + +@media (min-width: 992px) { +.modal-lg { +width:900px +} +} + +.tooltip { +position: absolute; +z-index: 1070; +display: block; +font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-style: normal; +font-weight: 400; +letter-spacing: normal; +line-break: auto; +line-height: 1.42857143; +text-align: left; +text-align: start; +text-decoration: none; +text-shadow: none; +text-transform: none; +white-space: normal; +word-break: normal; +word-spacing: normal; +word-wrap: normal; +font-size: 12px; +opacity: 0; +filter: alpha(opacity=0) +} + +.tooltip.in { +opacity: .9; +filter: alpha(opacity=90) +} + +.tooltip.top { +margin-top: -3px; +padding: 5px 0 +} + +.tooltip.right { +margin-left: 3px; +padding: 0 5px +} + +.tooltip.bottom { +margin-top: 3px; +padding: 5px 0 +} + +.tooltip.left { +margin-left: -3px; +padding: 0 5px +} + +.tooltip-inner { +max-width: 200px; +padding: 3px 8px; +color: #fff; +text-align: center; +background-color: #000; +border-radius: 4px +} + +.tooltip-arrow { +position: absolute; +width: 0; +height: 0; +border-color: transparent; +border-style: solid +} + +.tooltip.top .tooltip-arrow { +bottom: 0; +left: 50%; +margin-left: -5px; +border-width: 5px 5px 0; +border-top-color: #000 +} + +.tooltip.top-left .tooltip-arrow { +bottom: 0; +right: 5px; +margin-bottom: -5px; +border-width: 5px 5px 0; +border-top-color: #000 +} + +.tooltip.top-right .tooltip-arrow { +bottom: 0; +left: 5px; +margin-bottom: -5px; +border-width: 5px 5px 0; +border-top-color: #000 +} + +.tooltip.right .tooltip-arrow { +top: 50%; +left: 0; +margin-top: -5px; +border-width: 5px 5px 5px 0; +border-right-color: #000 +} + +.tooltip.left .tooltip-arrow { +top: 50%; +right: 0; +margin-top: -5px; +border-width: 5px 0 5px 5px; +border-left-color: #000 +} + +.tooltip.bottom .tooltip-arrow { +top: 0; +left: 50%; +margin-left: -5px; +border-width: 0 5px 5px; +border-bottom-color: #000 +} + +.tooltip.bottom-left .tooltip-arrow { +top: 0; +right: 5px; +margin-top: -5px; +border-width: 0 5px 5px; +border-bottom-color: #000 +} + +.tooltip.bottom-right .tooltip-arrow { +top: 0; +left: 5px; +margin-top: -5px; +border-width: 0 5px 5px; +border-bottom-color: #000 +} + +.popover { +position: absolute; +top: 0; +left: 0; +z-index: 1060; +display: none; +max-width: 276px; +padding: 1px; +font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +font-style: normal; +font-weight: 400; +letter-spacing: normal; +line-break: auto; +line-height: 1.42857143; +text-align: left; +text-align: start; +text-decoration: none; +text-shadow: none; +text-transform: none; +white-space: normal; +word-break: normal; +word-spacing: normal; +word-wrap: normal; +font-size: 14px; +background-color: #fff; +-webkit-background-clip: padding-box; +background-clip: padding-box; +border: 1px solid #ccc; +border: 1px solid rgba(0,0,0,0.2); +border-radius: 6px; +-webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.2); +box-shadow: 0 5px 10px rgba(0,0,0,0.2) +} + +.popover.top { +margin-top: -10px +} + +.popover.right { +margin-left: 10px +} + +.popover.bottom { +margin-top: 10px +} + +.popover.left { +margin-left: -10px +} + +.popover-title { +margin: 0; +padding: 8px 14px; +font-size: 14px; +background-color: #f7f7f7; +border-bottom: 1px solid #ebebeb; +border-radius: 5px 5px 0 0 +} + +.popover-content { +padding: 9px 14px +} + +.popover > .arrow,.popover > .arrow:after { +position: absolute; +display: block; +width: 0; +height: 0; +border-color: transparent; +border-style: solid +} + +.popover > .arrow { +border-width: 11px +} + +.popover > .arrow:after { +border-width: 10px; +content: "" +} + +.popover.top > .arrow { +left: 50%; +margin-left: -11px; +border-bottom-width: 0; +border-top-color: #999; +border-top-color: rgba(0,0,0,0.25); +bottom: -11px +} + +.popover.top > .arrow:after { +content: " "; +bottom: 1px; +margin-left: -10px; +border-bottom-width: 0; +border-top-color: #fff +} + +.popover.right > .arrow { +top: 50%; +left: -11px; +margin-top: -11px; +border-left-width: 0; +border-right-color: #999; +border-right-color: rgba(0,0,0,0.25) +} + +.popover.right > .arrow:after { +content: " "; +left: 1px; +bottom: -10px; +border-left-width: 0; +border-right-color: #fff +} + +.popover.bottom > .arrow { +left: 50%; +margin-left: -11px; +border-top-width: 0; +border-bottom-color: #999; +border-bottom-color: rgba(0,0,0,0.25); +top: -11px +} + +.popover.bottom > .arrow:after { +content: " "; +top: 1px; +margin-left: -10px; +border-top-width: 0; +border-bottom-color: #fff +} + +.popover.left > .arrow { +top: 50%; +right: -11px; +margin-top: -11px; +border-right-width: 0; +border-left-color: #999; +border-left-color: rgba(0,0,0,0.25) +} + +.popover.left > .arrow:after { +content: " "; +right: 1px; +border-right-width: 0; +border-left-color: #fff; +bottom: -10px +} + +.carousel { +position: relative +} + +.carousel-inner { +position: relative; +overflow: hidden; +width: 100% +} + +.carousel-inner > .item { +display: none; +position: relative; +-webkit-transition: .6s ease-in-out left; +-o-transition: .6s ease-in-out left; +transition: .6s ease-in-out left +} + +.carousel-inner > .item > img,.carousel-inner > .item > a > img { +line-height: 1 +} + +.carousel-inner > .active,.carousel-inner > .next,.carousel-inner > .prev { +display: block +} + +.carousel-inner > .active { +left: 0 +} + +.carousel-inner > .next,.carousel-inner > .prev { +position: absolute; +top: 0; +width: 100% +} + +.carousel-inner > .next { +left: 100% +} + +.carousel-inner > .prev { +left: -100% +} + +.carousel-inner > .next.left,.carousel-inner > .prev.right { +left: 0 +} + +.carousel-inner > .active.left { +left: -100% +} + +.carousel-inner > .active.right { +left: 100% +} + +.carousel-control { +position: absolute; +top: 0; +left: 0; +bottom: 0; +width: 15%; +opacity: .5; +filter: alpha(opacity=50); +font-size: 20px; +color: #fff; +text-align: center; +text-shadow: 0 1px 2px rgba(0,0,0,0.6) +} + +.carousel-control.left { +background-image: -webkit-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%); +background-image: -o-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%); +background-image: -webkit-gradient(linear,left top,right top,color-stop(0,rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001))); +background-image: linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%); +background-repeat: repeat-x; +filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1) +} + +.carousel-control.right { +left: auto; +right: 0; +background-image: -webkit-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%); +background-image: -o-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%); +background-image: -webkit-gradient(linear,left top,right top,color-stop(0,rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5))); +background-image: linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%); +background-repeat: repeat-x; +filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1) +} + +.owl-pagination { +display: none +} + +.owl-controls .owl-buttons div { +width: 34px!important; +height: 50px!important; +background: #596065!important; +top: 50%!important; +margin: -25px 0 0!important; +opacity: 1!important; +border-radius: 0!important; +padding: 0!important; +position: absolute +} + +.owl-controls .owl-buttons div:hover { +background: #acafb2!important; +transition: .2s!important +} + +.owl-controls .owl-buttons .owl-prev { +border-top-right-radius: 4px!important; +border-bottom-right-radius: 4px!important; +left: -20px +} + +.owl-controls .owl-buttons .owl-next { +border-top-left-radius: 4px!important; +border-bottom-left-radius: 4px!important; +right: -20px +} + +.owl-controls .owl-buttons div:before { +position: absolute; +content: ''; +width: 8px; +height: 22px; +background: url(../images/arrows_blocks.png) no-repeat; +top: 50%; +margin-top: -11px; +left: 50%; +margin-left: -4px +} + +.owl-controls .owl-buttons .owl-prev:before { +background-position: 0 0 +} + +.owl-controls .owl-buttons .owl-next:before { +background-position: -8px 0 +} + +.carousel-control:hover,.carousel-control:focus { +outline: 0; +color: #fff; +text-decoration: none; +opacity: .9; +filter: alpha(opacity=90) +} + +.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right { +position: absolute; +top: 50%; +margin-top: -10px; +z-index: 5; +display: inline-block +} + +.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left { +left: 50%; +margin-left: -10px +} + +.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right { +right: 50%; +margin-right: -10px +} + +.carousel-control .icon-prev,.carousel-control .icon-next { +width: 20px; +height: 20px; +line-height: 1; +font-family: serif +} + +.carousel-control .icon-prev:before { +content: '\2039' +} + +.carousel-control .icon-next:before { +content: '\203a' +} + +.carousel-indicators { +position: absolute; +bottom: 10px; +left: 50%; +z-index: 15; +width: 60%; +margin-left: -30%; +padding-left: 0; +list-style: none; +text-align: center +} + +.carousel-indicators li { +display: inline-block; +width: 10px; +height: 10px; +margin: 1px; +text-indent: -999px; +border: 1px solid #fff; +border-radius: 10px; +cursor: pointer; +background-color: #000 \9; +background-color: rgba(0,0,0,0) +} + +.carousel-indicators .active { +margin: 0; +width: 12px; +height: 12px; +background-color: #fff +} + +.carousel-caption { +position: absolute; +left: 15%; +right: 15%; +bottom: 20px; +z-index: 10; +padding-top: 20px; +padding-bottom: 20px; +color: #fff; +text-align: center; +text-shadow: 0 1px 2px rgba(0,0,0,0.6) +} + +.carousel-caption .btn { +text-shadow: none +} + +@media screen and (min-width: 768px) { +.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next { +width:30px; +height: 30px; +margin-top: -15px; +font-size: 30px +} + +.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev { +margin-left: -15px +} + +.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next { +margin-right: -15px +} + +.carousel-caption { +left: 20%; +right: 20%; +padding-bottom: 30px +} + +.carousel-indicators { +bottom: 20px +} +} + +.clearfix:before,.clearfix:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical > .btn-group:before,.btn-group-vertical > .btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after { +content: " "; +display: table +} + +.clearfix:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical > .btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after { +clear: both +} + +.center-block { +display: block; +margin-left: auto; +margin-right: auto +} + +.pull-right { +float: right!important +} + +.pull-left { +float: left!important +} + +.hide { +display: none!important +} + +.show { +display: block!important +} + +.invisible { +visibility: hidden +} + +.text-hide { +font: 0/0 a; +color: transparent; +text-shadow: none; +background-color: transparent; +border: 0 +} + +.hidden { +display: none!important +} + +.affix { +position: fixed +} + +.visible-xs,.visible-sm,.visible-md,.visible-lg { +display: none!important +} + +.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block { +display: none!important +} + +@media (max-width: 767px) { +.visible-xs { +display:block!important +} + +table.visible-xs { +display: table!important +} + +tr.visible-xs { +display: table-row!important +} + +th.visible-xs,td.visible-xs { +display: table-cell!important +} +} + +@media (max-width: 767px) { +.visible-xs-block { +display:block!important +} +} + +@media (max-width: 767px) { +.visible-xs-inline { +display:inline!important +} +} + +@media (max-width: 767px) { +.visible-xs-inline-block { +display:inline-block!important +} +} + +@media (min-width: 768px) and (max-width: 991px) { +.visible-sm { +display:block!important +} + +table.visible-sm { +display: table!important +} + +tr.visible-sm { +display: table-row!important +} + +th.visible-sm,td.visible-sm { +display: table-cell!important +} + +.visible-sm-block { +display: block!important +} + +.visible-sm-inline { +display: inline!important +} + +.visible-sm-inline-block { +display: inline-block!important +} +} + +@media (min-width: 992px) and (max-width: 1199px) { +.visible-md { +display:block!important +} + +table.visible-md { +display: table!important +} + +tr.visible-md { +display: table-row!important +} + +th.visible-md,td.visible-md { +display: table-cell!important +} + +.visible-md-block { +display: block!important +} + +.visible-md-inline { +display: inline!important +} + +.visible-md-inline-block { +display: inline-block!important +} +} + +@media (min-width: 1200px) { +.visible-lg { +display:block!important +} + +table.visible-lg { +display: table!important +} + +tr.visible-lg { +display: table-row!important +} + +th.visible-lg,td.visible-lg { +display: table-cell!important +} + +.visible-lg-block { +display: block!important +} + +.visible-lg-inline { +display: inline!important +} + +.visible-lg-inline-block { +display: inline-block!important +} +} + +@media (max-width: 767px) { +.hidden-xs { +display:none!important +} +} + +@media (min-width: 768px) and (max-width: 991px) { +.hidden-sm { +display:none!important +} +} + +@media (min-width: 992px) and (max-width: 1199px) { +.hidden-md { +display:none!important +} +} + +@media (min-width: 1200px) { +.hidden-lg { +display:none!important +} +} + +.visible-print { +display: none!important +} + +@media print { +.visible-print { +display: block!important +} + +table.visible-print { +display: table!important +} + +tr.visible-print { +display: table-row!important +} + +th.visible-print,td.visible-print { +display: table-cell!important +} +} + +.visible-print-block { +display: none!important +} + +@media print { +.visible-print-block { +display: block!important +} +} + +.visible-print-inline { +display: none!important +} + +@media print { +.visible-print-inline { +display: inline!important +} +} + +.visible-print-inline-block { +display: none!important +} + +@media print { +.visible-print-inline-block { +display: inline-block!important +} +} + +@media print { +.hidden-print { +display: none!important +} +} + +html { +color: #222; +font-size: 1em; +line-height: 1.4 +} + +::-moz-selection { +background: #b3d4fc; +text-shadow: none +} + +::selection { +background: #b3d4fc; +text-shadow: none +} + +hr { +display: block; +height: 1px; +border: 0; +border-top: 1px solid #ccc; +margin: 1em 0; +padding: 0 +} + +audio,canvas,iframe,img,svg,video { +vertical-align: middle +} + +fieldset { +border: 0; +margin: 0; +padding: 0 +} + +textarea { +resize: vertical +} + +.browserupgrade { +margin: .2em 0; +background: #ccc; +color: #000; +padding: .2em 0 +} + +.hidden { +display: none!important +} + +.visuallyhidden { +border: 0; +clip: rect(0 0 0 0); +height: 1px; +margin: -1px; +overflow: hidden; +padding: 0; +position: absolute; +width: 1px +} + +.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus { +clip: auto; +height: auto; +margin: 0; +overflow: visible; +position: static; +width: auto +} + +.invisible { +visibility: hidden +} + +.clearfix:before,.clearfix:after { +content: " "; +display: table +} + +.clearfix:after { +clear: both +} + +@media print { +*,:before,:after { +background: transparent!important; +color: #000!important; +box-shadow: none!important; +text-shadow: none!important +} + +a,a:visited { +text-decoration: underline +} + +a[href]:after { +content: " (" attr(href) ")" +} + +abbr[title]:after { +content: " (" attr(title) ")" +} + +a[href^="#"]:after,a[href^="javascript:"]:after { +content: "" +} + +pre,blockquote { +border: 1px solid #999; +page-break-inside: avoid +} + +thead { +display: table-header-group +} + +tr,img { +page-break-inside: avoid +} + +img { +max-width: 100%!important +} + +p,h2,h3 { +orphans: 3; +widows: 3 +} + +h2,h3 { +page-break-after: avoid +} +} + +body,html { +margin: 0; +padding: 0 +} + +body { +color: #333; +font: 15px/16px Roboto,sans-serif +} + +body,.background-body { +background: #edeeef +} + +a { +color: #0f6fc7 +} + +a.popup { +text-decoration: none; +border-bottom: 1px dashed #003569 +} + +.container { +min-width: 970px +} + +.row { +margin-right: -15px; +margin-left: -15px +} + +.padding-left-40 { +padding-left: 40px +} + +.padding-right-40 { +padding-right: 40px +} + +.padding-left-right-15 { +padding-left: 15px; +padding-right: 15px +} + +.pull-left { +float: left +} + +.pull-right { +float: right +} + +.margin-top-10 { +margin-top: 10px +} + +.margin-top-20 { +margin-top: 20px +} + +.margin-top-30 { +margin-top: 30px +} + +.margin-top-40 { +margin-top: 40px +} + +.margin-bottom-10 { +margin-bottom: 10px +} + +.margin-bottom-20 { +margin-bottom: 20px +} + +.margin-bottom-30 { +margin-bottom: 30px +} + +.margin-bottom-40 { +margin-bottom: 40px +} + +.margin-left-right-10 { +margin-left: 10px; +margin-right: 10px +} + +.block-3,.block-6 { +position: relative +} + +.block-15 { +float: left; +width: 15% +} + +.block-25 { +float: left; +width: 25% +} + +.block-33 { +float: left; +width: 33% +} + +.block-50 { +float: left; +width: 50% +} + +.block-60 { +float: left; +width: 60% +} + +.block-66 { +float: left; +width: 66% +} + +.block-75 { +float: left; +width: 75% +} + +.block-100 { +float: left; +width: 100% +} + +.input-group { +width: 100%; +position: relative; +display: table +} + +.input-group .form-control { +width: 100%; +margin-bottom: 0 +} + +.input-group-addon,.input-group-btn,.input-group .form-control { +display: table-cell +} + +.ul { +margin: 0; +padding: 0; +list-style: none +} + +.strong { +font-weight: 700 +} + +.btn { +display: inline-block; +padding: 4px 14px; +margin: 0; +margin-bottom: 0; +font-family: 'Roboto'; +font-size: 16px; +line-height: 20px; +color: #fff; +text-align: center; +vertical-align: middle; +cursor: pointer; +background-color: #256caf; +background-image: -webkit-gradient(linear,0 0,0 100%,from(#2175c2),to(#2668a5)); +background-image: -webkit-linear-gradient(top,#2175c2,#2668a5); +background-image: -o-linear-gradient(top,#2175c2,#2668a5); +background-image: linear-gradient(to bottom,#2175c2,#2668a5); +background-image: -moz-linear-gradient(top,#2175c2,#2668a5); +background-repeat: repeat-x; +border: 0; +border-top: 1px solid #256caf; +border-bottom: 1px solid #256caf; +-webkit-border-radius: 4px; +-moz-border-radius: 4px; +border-radius: 4px; +filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff2175c2',endColorstr='#ff2668a5',GradientType=0); +filter: progid:dximagetransform.microsoft.gradient(enabled=false); +-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); +-moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); +box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); +text-decoration: none +} + +.btn:hover { +color: #fff +} + +.btn-large { +padding: 9px 29px; +font-size: 18px; +line-height: 28px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px +} + +.img-responsive { +display: block; +height: auto; +max-width: 100% +} + +.content-title { +color: #333; +margin: 20px 0; +font-size: 18px; +font-weight: 700 +} + +.text-center { +text-align: center +} + +.clearfix { +clear: both +} + +#top-nav-wrapper { +float: left; +width: 100%; +background: #a7acb0; +position: fixed; +z-index: 2000; +height: 40px +} + +#top-nav { +height: 40px; +width: 100%; +float: left +} + +#top-nav .phones { +float: left; +padding: 0 40px +} + +#top-nav span.phone1,#top-nav span.phone2 { +display: inline-block; +font-size: 18px; +padding: 16px 10px 15px 17px +} + +#top-nav .top-menu { +padding-left: 0; +margin-bottom: 0 +} + +#top-nav .top-menu li { +position: relative; +display: inline-block +} + +#top-nav .top-menu li a { +font-size: 13px; +text-decoration: none; +text-transform: uppercase; +color: #fff; +padding: 0 13px; +line-height: 40px +} + +#top-nav .top-menu li a:hover { +text-decoration: underline +} + +#top-nav .top-menu li:first-child a { +background: none; +padding-left: 0 +} + +.cabinet_link_ { +line-height: 40px; +color: #fff; +float: right; +display: block; +width: 100%; +text-align: right; +padding-right: 15px; +border-left: 1px solid #959a9e; +border-right: 1px solid #959a9e +} + +.cabinet_link_ span { +position: relative +} + +.cabinet_link_ span:before { +content: ''; +position: absolute; +width: 14px; +height: 16px; +top: 50%; +margin-top: -8px; +left: -20px; +background: url(../images/new_img/ico/ico-4.png) no-repeat +} + +.cabinet_link_:hover { +color: #fff!important +} + +#top-nav ul.top-menu > li:hover > ul { +display: block +} + +#top-nav ul.top-menu > li > ul { +background: #fff; +max-width: 320px; +min-width: 120px; +display: none; +margin: 0; +padding: 0; +width: auto; +position: absolute; +top: 32px; +left: 0; +-webkit-border-radius: 0 0 10px 10px; +border-radius: 0 0 10px 10px; +-webkit-box-shadow: 4px 5px 1px 5px rgba(0,0,0,0.2); +box-shadow: 4px 5px 1px 5px rgba(0,0,0,0.2) +} + +#top-nav ul.top-menu > li > ul > li { +float: left; +width: 100% +} + +#top-nav ul.top-menu > li > ul > li > a { +float: left; +width: 100%; +padding: 5px 10px; +font-size: 14px; +line-height: 18px; +text-transform: none +} + +#top-nav ul.top-menu > li > ul > li > a:hover { +color: red +} + +header { +height: 120px; +position: relative; +width: 100%; +float: left; +background: #fff; +padding: 0; +margin-top: 40px +} + +header a#logo { +float: left; +padding-right: 10px +} + +header a#logo img { +width: 100% +} + +#brand_bar { +float: left; +width: 100%; +background: #fff +} + +#brand_bar ul { +padding: 0; +margin: 0 auto; +display: table +} + +#brand_bar ul li { +display: table-cell; +padding: 0 8px +} + +#top-cart { +max-width: 196px; +position: absolute; +right: 0; +top: 0; +padding: 0 +} + +.btn-cart { +width: 100%; +background: url(/images/btn_cart_angle.png) 100% 0 #489b6b no-repeat; +border: none; +font: 13px/13px Verdana; +text-transform: uppercase; +text-decoration: none; +color: #fff; +padding: 17px 0; +-webkit-border-radius: 0; +-moz-border-radius: 0; +border-radius: 0 +} + +p.empty-cart { +width: 100%; +padding: 50px 0; +text-align: center +} + +#top-cart .btn.btn-cart.not_empty i { +position: absolute; +right: 10px; +top: 2px; +width: 46px; +height: 42px; +background: url(/images/cart-icon.png) 0 0 transparent no-repeat +} + +.ordering_tbl { +float: left; +width: 100%; +margin: 40px 0 +} + +.catalogueLeft.orderLeftPanel .columnLeftInfo .prodview { +background: transparent; +margin: 40px 0 +} + +#tbl_cart { +width: 100%; +margin: 0 0 40px +} + +#tbl_cart td.order_img { +text-align: center; +width: 160px +} + +#tbl_cart .iTitle { +padding: 20px 0 0 +} + +#tbl_cart .iTitle a { +color: #337ab7; +font-weight: 700; +text-decoration: underline +} + +.eraseCartBtnCell .btn { +background: #fff!important; +border: 1px solid #dadada; +color: #999 +} + +.order_item { +background: #fff; +padding: 20px; +margin: 0 0 40px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px +} + +table.tbl_cart .totalPrice { +font-size: 20px; +color: #000; +color: #236fb4 +} + +table.tbl_cart .totalPrice label#total { +font-style: italic +} + +table.tbl_cart table.order_details { +float: right +} + +table.tbl_cart table.order_details .del_order { +color: #999; +float: right; +margin-bottom: 20px +} + +table.tbl_cart table.order_details .del_order span { +padding: 0 4px 0 3px; +border: 1px solid #999; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px +} + +table.tbl_cart table.order_details .del_order:hover { +color: red +} + +table.tbl_cart table.order_details .del_order:hover span { +border: 1px solid red; +text-decoration: none +} + +table.tbl_cart table.order_details .iPriceOne,table.tbl_cart table.order_details .iPrice { +font-style: italic +} + +table.tbl_cart table.order_details td:nth-child(2n+1) { +padding-right: 20px +} + +table.tbl_cart table.order_details td { +text-align: right +} + +table.tbl_cart table.order_details .count_choise { +float: right +} + +table.tbl_cart table.order_details .count_choise input { +height: 30px; +-webkit-border-top-right-radius: 0; +-webkit-border-bottom-left-radius: 0; +-moz-border-radius-topright: 0; +-moz-border-radius-bottomleft: 0; +border-top-right-radius: 0; +border-bottom-left-radius: 0 +} + +table.tbl_cart table.order_details .count_choise .plus,table.tbl_cart table.order_details .count_choise .minus,table.tbl_cart table.order_details .count_choise .minus-disabled { +margin: 10px 7px 8px 0 +} + +#myForm .modal-dialog.buy-product { +width: 600px +} + +#myForm .modal-dialog.buy-product .h3 { +font-size: 17px; +color: #235b94 +} + +#header_search { +float: left; +max-width: 400px; +margin-top: 21px +} + +.popular_search_title { +padding: 0 10px 0 50px +} + +#header_search p { +font-size: 13px; +margin: 0 0 5px +} + +#header_search .input-group-loop { +height: 42px; +width: 42px; +display: table-cell; +background: url(/images/search_loop.png) 0 0 #f5f5f5 no-repeat +} + +#header_search input[type=text] { +float: left; +height: 42px; +background: #f5f5f5; +display: table-cell; +width: 100%; +border: 1px solid #d9d9d9; +font-size: 13px; +line-height: 40px; +padding: 0 5px 0 10px +} + +.input-group-btn { +display: table-cell +} + +#header_search input[type=submit] { +float: left; +border: none; +width: 100%; +height: 42px; +background: #1d60a3; +color: #fff; +text-transform: uppercase; +position: relative; +line-height: 30px; +-webkit-border-radius: 0; +-moz-border-radius: 0; +border-radius: 0; +-webkit-box-shadow: inset 0 0 3px 3px rgba(117,158,199,1); +-moz-box-shadow: inset 0 0 3px 3px rgba(117,158,199,1); +box-shadow: inset 0 0 3px 3px rgba(117,158,199,1); +min-width: 80px +} + +.search_btn_angle { +width: 6px; +height: 6px; +position: absolute; +top: 0; +right: -1px; +background: url(/images/search_btn_angle.png) no-repeat +} + +#header_feedback { +float: left; +padding: 21px 0 5px 30px +} + +#header_feedback form { +background: #fcd103; +padding-left: 10px +} + +#header_feedback form input { +display: none; +width: 115px; +border: none +} + +#header_feedback form input:focus,#header_feedback form button:focus { +outline: 0 +} + +#header_feedback form button { +font-size: 14px; +background: #fcd103; +position: relative; +border: none; +color: #000; +line-height: 30px; +padding: 6px 14px +} + +#header_feedback .feedback_btn_angle { +width: 6px; +height: 6px; +position: absolute; +top: 0; +right: 0; +background: url(/images/search_btn_angle.png) no-repeat +} + +#mainmenu { +float: left; +width: 100%; +background: #0f6fc7 +} + +#mainmenu .container { +position: relative +} + +#menu-bar { +width: 100%; +margin: 0; +padding: 0; +height: 48px; +line-height: 100%; +position: relative; +z-index: 999 +} + +#menu-bar li { +margin: 0; +padding: 0; +float: left; +list-style: none; +height: 48px +} + +#menu-bar a { +font-family: 'Roboto',sans-serif; +font-style: normal; +font-size: 15px; +color: #fff; +text-decoration: none; +display: block; +padding: 0 20px; +margin: 0; +text-transform: uppercase; +line-height: 48px +} + +.no-padding-left { +padding-left: 0!important +} + +.no-padding-right { +padding-right: 0!important +} + +#menu-bar li { +border-right: 1px solid #075fb0 +} + +#menu-bar li:first-child { +border-left: 1px solid #075fb0 +} + +#menu-bar li:hover,.new_catalog.show { +background: #075fb0 +} + +.new_cat_link,.sale_catalog { +position: relative +} + +.new_cat_link:before { +content: ''; +position: absolute; +width: 9px; +height: 5px; +background: url(../images/new_img/ico/ico-1.png) no-repeat; +top: 50%; +margin-top: -2px; +right: 6px; +transform: rotate(180deg); +-webkit-transform: rotate(180deg) +} + +.sale_catalog .new_cat_link:before { +right: 0 +} + +.sale_catalog.show-sale .new_cat_link:before { +transform: rotate(0deg); +-webkit-transform: rotate(0deg) +} + +.sale_catalog { +position: relative; +z-index: 99992 +} + +.sale_catalog div { +display: none; +position: absolute; +left: 0; +top: 29px; +background: #fff; +width: 120px; +box-shadow: 0 0 12px 0 rgba(0,0,0,0.35); +padding: 5px 10px; +z-index: 99991 +} + +.sale-overlay { +position: fixed; +width: 100%; +height: 100%; +background: #fff; +z-index: 1 +} + +.sale_catalog:hover div { +display: block +} + +.sale_catalog div ul { +list-style: none; +width: 100%; +float: left; +padding: 0!important +} + +.sale_catalog div ul li { +float: left; +width: 100% +} + +.sale_catalog div ul li a { +text-decoration: none!important; +text-transform: none!important; +color: #0f6fc7!important; +padding: 0!important; +line-height: 26px!important +} + +.sale_catalog:hover a { +text-decoration: none!important +} + +.sale_catalog div ul li a:hover { +text-decoration: underline!important +} + +.hide-cat-menu { +display: none; +position: absolute; +width: 100%; +top: 48px; +left: 0; +background: #fff; +box-shadow: 0 0 7px 0 rgba(0,0,0,0.35) +} + +.new_catalog.show a:before,.sale_catalog:hover a:before { +transform: rotate(0deg); +-webkit-transform: rotate(0deg) +} + +.new_catalog.show .hide-cat-menu { +display: block +} + +.main-cat_ { +padding-bottom: 40px +} + +.main-cat_ ul { +padding-left: 0 +} + +.main-cat_ ul li { +width: 100%; +float: left; +border-left: 0!important; +border-right: 0!important; +height: 40px; +border-bottom: 1px solid #edeeef +} + +.main-cat_ ul li a { +color: #4b4b4b!important; +padding-right: 0!important; +position: relative +} + +.main-cat_ ul li a:before { +width: 5px; +height: 9px; +content: ''; +background: url(../images/new_img/ico/ico-2.png) no-repeat; +position: absolute; +top: 50%; +margin-top: -4px; +right: 20px; +transform: rotate(0deg); +-webkit-transform: rotate(0deg)!important +} + +.main-cat_ ul li.act a:before { +background: url(../images/new_img/ico/ico-3.png) no-repeat +} + +.main-cat_ ul li.act a { +color: #fff!important +} + +.hide-cat-menu li:hover { +background: #fff!important +} + +.hide-cat-menu li.act { +background: #a7acb0!important +} + +.hide-cat-sub { +position: relative; +background: #edeeef; +height: 100% +} + +.hide-cat-sub ul { +display: none; +padding-left: 0!important +} + +.hide-cat-sub ul.active-show { +display: block +} + +.hide-cat-menu table td { +vertical-align: top +} + +.sub-cat_ ul li { +border: 0!important; +height: 180px!important; +position: relative; +margin-top: 20px!important +} + +.sub-cat_ ul li table { +width: 100%; +height: 110px; +text-align: center +} + +.sub-cat_ ul li table td { +vertical-align: middle +} + +.sub-cat_ ul li table img { +max-width: 100px; +max-height: 110px; +vertical-align: middle +} + +.sub-cat_ ul li a { +display: block; +width: 100%; +height: 100%; +text-decoration: none; +position: relative; +padding: 0 15px!important; +float: left +} + +.sub-cat_ ul li:hover a div { +width: 100%; +float: left; +position: relative; +width: 100%; +height: 100%; +box-shadow: 0 0 7px 0 rgba(0,0,0,0.35); +height: auto; +min-height: 170px; +top: 0; +left: 0; +background: #fff; +padding-bottom: 10px!important; +z-index: 99999 +} + +.sub-cat_ ul li:hover { +background: none!important +} + +.sub-cat_ ul li span { +display: block; +color: #0f6fc7; +font-size: 14px; +line-height: normal; +text-align: center; +height: 34px; +overflow: hidden; +margin-top: 10px +} + +.sub-cat_ ul li a:hover span { +text-decoration: underline!important; +height: auto +} + +.wrapper { +float: left; +width: 100%; +background: transparent +} + +.wrapper.white { +background: #fff +} + +#bigSlider,#catSlider { +float: left; +width: 100%; +position: relative; +background: #fff; +border-bottom: 3px solid #b3b3b3; +overflow: hidden +} + +#catSlider { +border-bottom: none +} + +#bigSlider .carousel,#catSlider .carousel { +margin: 0 auto; +max-width: 1400px; +min-width: 1000px +} + +#bigSlider .carousel-indicators { +background: #fff; +border: 3px solid #595756; +padding: 6px 28px; +width: auto; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px +} + +#bigSlider .carousel-indicators li { +width: 10px; +height: 10px; +border: 1px solid #595756; +-webkit-border-radius: 0; +-moz-border-radius: 0; +border-radius: 0 +} + +#bigSlider .carousel-indicators li.active { +width: 10px; +height: 10px; +border: 1px solid #15599b; +background: #15599b; +margin: 1px +} + +.carousel { +position: relative +} + +.carousel-inner { +position: relative; +overflow: hidden; +width: 100%; +text-align: center +} + +.carousel-inner > .item { +display: none; +position: relative; +-webkit-transition: .6s ease-in-out left; +-o-transition: .6s ease-in-out left; +transition: .6s ease-in-out left +} + +.carousel-inner > .item > img,.carousel-inner > .item > a > img { +line-height: 1 +} + +@media all and (transform-3d),(-webkit-transform-3d) { +.carousel-inner > .item { +-webkit-transition: -webkit-transform .6s ease-in-out; +-o-transition: -o-transform .6s ease-in-out; +transition: transform .6s ease-in-out; +-webkit-backface-visibility: hidden; +backface-visibility: hidden; +-webkit-perspective: 1000px; +perspective: 1000px +} + +.carousel-inner > .item.next,.carousel-inner > .item.active.right { +-webkit-transform: translate3d(100%,0,0); +transform: translate3d(100%,0,0); +left: 0 +} + +.carousel-inner > .item.prev,.carousel-inner > .item.active.left { +-webkit-transform: translate3d(-100%,0,0); +transform: translate3d(-100%,0,0); +left: 0 +} + +.carousel-inner > .item.next.left,.carousel-inner > .item.prev.right,.carousel-inner > .item.active { +-webkit-transform: translate3d(0,0,0); +transform: translate3d(0,0,0); +left: 0 +} +} + +.carousel-inner > .active,.carousel-inner > .next,.carousel-inner > .prev { +display: block +} + +.carousel-inner > .active { +left: 0 +} + +.carousel-inner > .next,.carousel-inner > .prev { +position: absolute; +top: 0; +width: 100% +} + +.carousel-inner > .next { +left: 100% +} + +.carousel-inner > .prev { +left: -100% +} + +.carousel-inner > .next.left,.carousel-inner > .prev.right { +left: 0 +} + +.carousel-inner > .active.left { +left: -100% +} + +.carousel-inner > .active.right { +left: 100% +} + +.carousel-control { +position: absolute; +top: 0; +left: 0; +bottom: 0; +width: 10%; +opacity: 1; +filter: alpha(opacity=50); +font-size: 20px; +color: #fff; +text-align: center; +text-shadow: 0 1px 2px rgba(0,0,0,0.6) +} + +.carousel-control.leftOrig { +background: -moz-linear-gradient(left,rgba(255,255,255,1) 0%,rgba(255,255,255,1) 50%,rgba(255,255,255,0.78) 78%,rgba(255,255,255,0) 100%); +background: -webkit-gradient(linear,left top,right top,color-stop(0%,rgba(255,255,255,1)),color-stop(50%,rgba(255,255,255,1)),color-stop(78%,rgba(255,255,255,0.78)),color-stop(100%,rgba(255,255,255,0))); +background: -webkit-linear-gradient(left,rgba(255,255,255,1) 0%,rgba(255,255,255,1) 50%,rgba(255,255,255,0.78) 78%,rgba(255,255,255,0) 100%); +background: -o-linear-gradient(left,rgba(255,255,255,1) 0%,rgba(255,255,255,1) 50%,rgba(255,255,255,0.78) 78%,rgba(255,255,255,0) 100%); +background: -ms-linear-gradient(left,rgba(255,255,255,1) 0%,rgba(255,255,255,1) 50%,rgba(255,255,255,0.78) 78%,rgba(255,255,255,0) 100%); +background: linear-gradient(to right,rgba(255,255,255,1) 0%,rgba(255,255,255,1) 50%,rgba(255,255,255,0.78) 78%,rgba(255,255,255,0) 100%); +filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#00ffffff',GradientType=1) +} + +.carousel-control.left { +background: -moz-linear-gradient(left,rgba(255,255,255,0.95) 0%,rgba(255,255,255,0.8) 50%,rgba(255,255,255,0.78) 78%,rgba(255,255,255,0) 100%); +background: -webkit-gradient(linear,left top,right top,color-stop(0%,rgba(255,255,255,0.95)),color-stop(50%,rgba(255,255,255,0.8)),color-stop(78%,rgba(255,255,255,0.78)),color-stop(100%,rgba(255,255,255,0))); +background: -webkit-linear-gradient(left,rgba(255,255,255,0.95) 0%,rgba(255,255,255,0.8) 50%,rgba(255,255,255,0.75) 78%,rgba(255,255,255,0) 100%); +background: -o-linear-gradient(left,rgba(255,255,255,0.95) 0%,rgba(255,255,255,0.8) 50%,rgba(255,255,255,0.75) 78%,rgba(255,255,255,0) 100%); +background: -ms-linear-gradient(left,rgba(255,255,255,0.95) 0%,rgba(255,255,255,0.8) 50%,rgba(255,255,255,0.75) 78%,rgba(255,255,255,0) 100%); +background: linear-gradient(to right,rgba(255,255,255,0.95) 0%,rgba(255,255,255,0.8) 50%,rgba(255,255,255,0.75) 78%,rgba(255,255,255,0) 100%); +filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#00ffffff',GradientType=1) +} + +.carousel-control.right { +left: auto; +right: 0; +background: -moz-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,0.78) 22%,rgba(255,255,255,1) 50%,rgba(255,255,255,1) 100%); +background: -webkit-gradient(linear,left top,right top,color-stop(0%,rgba(255,255,255,0)),color-stop(22%,rgba(255,255,255,0.78)),color-stop(50%,rgba(255,255,255,1)),color-stop(100%,rgba(255,255,255,1))); +background: -webkit-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,0.78) 22%,rgba(255,255,255,1) 50%,rgba(255,255,255,1) 100%); +background: -o-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,0.78) 22%,rgba(255,255,255,1) 50%,rgba(255,255,255,1) 100%); +background: -ms-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,0.78) 22%,rgba(255,255,255,1) 50%,rgba(255,255,255,1) 100%); +background: linear-gradient(to right,rgba(255,255,255,0) 0%,rgba(255,255,255,0.78) 22%,rgba(255,255,255,1) 50%,rgba(255,255,255,1) 100%); +filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffffff',endColorstr='#ffffff',GradientType=1) +} + +.carousel-control:hover,.carousel-control:focus { +outline: 0; +color: #fff; +text-decoration: none; +filter: alpha(opacity=90) +} + +.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right { +position: absolute; +top: 50%; +margin-top: -10px; +z-index: 5; +display: inline-block +} + +.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left { +left: 50%; +margin-left: -10px +} + +.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right { +right: 50%; +margin-right: -10px +} + +.carousel-control .icon-prev,.carousel-control .icon-next { +width: 20px; +height: 20px; +line-height: 1; +font-family: serif +} + +.carousel-control .icon-prev:before { +content: '\2039' +} + +.carousel-control .icon-next:before { +content: '\203a' +} + +.carousel-indicators { +position: absolute; +bottom: 10px; +left: 50%; +z-index: 15; +width: 60%; +margin-left: -30%; +padding-left: 0; +list-style: none; +text-align: center +} + +#myCarousel2 .carousel-indicators { +left: 60% +} + +#myCarousel3 .carousel-indicators { +left: 80% +} + +#myCarousel4 .carousel-indicators { +left: 80% +} + +.carousel-indicators li { +display: inline-block; +width: 10px; +height: 10px; +margin: 1px; +text-indent: -999px; +border: 1px solid #fff; +border-radius: 10px; +cursor: pointer; +background-color: #000 \9; +background-color: rgba(0,0,0,0) +} + +.carousel-indicators .active { +margin: 0; +width: 12px; +height: 12px; +background-color: #fff +} + +.carousel-caption { +position: absolute; +left: 15%; +right: 15%; +bottom: 20px; +z-index: 10; +padding-top: 20px; +padding-bottom: 20px; +color: #fff; +text-align: center; +text-shadow: 0 1px 2px rgba(0,0,0,0.6) +} + +.carousel-caption .btn { +text-shadow: none +} + +.img-nav { +background: #fff; +border: 2px solid #d9d9d9; +padding: 3px; +position: absolute; +top: 40%; +width: 150px; +height: auto; +display: inline-block; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px +} + +#catSlider .carousel .img-nav { +width: 90px +} + +.img-nav.img-prev { +left: -110px +} + +#catSlider .carousel .img-nav.img-prev { +left: -60px +} + +.img-nav.img-next { +right: -110px +} + +#catSlider .carousel .img-nav.img-next { +right: -60px +} + +.carousel-control-nav { +position: absolute; +top: 45%; +width: 25px; +height: 43px; +background: url(/images/slider_nav.png) 0 0 no-repeat +} + +.carousel-control-nav.right { +background: url(/images/slider_nav.png) -25px 0 no-repeat +} + +@media screen and (min-width: 768px) { +.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next { +width:30px; +height: 30px; +margin-top: -15px; +font-size: 30px +} + +.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev { +margin-left: -15px +} + +.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next { +margin-right: -15px +} + +.carousel-caption { +left: 20%; +right: 20%; +padding-bottom: 30px +} + +.carousel-indicators { +bottom: 20px +} +} + +#catSlider .cat-slide-part { +position: relative; +float: left; +width: 100%; +border: 5px solid #fff +} + +#catSlider .cat-slide-part .cat-slide-part-price { +position: absolute; +right: 50px; +top: 50px; +padding: 10px; +background: rgba(255,255,255,0.5); +color: #000; +font-size: 38px; +font-style: italic; +font-weight: 600 +} + +#catSlider .cat-slide-part .cat-slide-part-price small { +font-size: 20px +} + +.bigSlidertabs { +width: 100%; +position: absolute; +bottom: 0; +z-index: 9; +-webkit-transition: all 1s ease; +-moz-transition: all 1s ease; +-o-transition: all 1s ease; +-ms-transition: all 1s ease; +transition: all 1s ease +} + +.bigSlidertabs.fixed { +bottom: -50px +} + +.bigSlidertabs.fixed:hover { +bottom: 0 +} + +.bigSlidertabs a { +color: #939393 +} + +.bigSlidertabs a p a { +color: #0044b5; +font-weight: 700 +} + +.bigSlidertabs .tab1,.bigSlidertabs .tab2,.bigSlidertabs .tab3,.bigSlidertabs .tab4 { +background: #fff; +color: #acacac; +text-align: center; +cursor: pointer +} + +.bigSlidertabs .tab1 { +float: left; +height: 109px; +width: 204px +} + +.bigSlidertabs .tab1 .tab_bg_1 { +width: 100%; +height: 53px; +background: url(/images/tab1_bg.png) 50% 0 no-repeat +} + +.bigSlidertabs .tab2 { +float: left; +height: 109px; +width: 204px +} + +.bigSlidertabs .tab2 .tab_bg_2 { +width: 100%; +height: 53px; +background: url(/images/tab2_bg.png) 50% 0 no-repeat +} + +.bigSlidertabs .tab3 { +float: right; +height: 109px; +width: 350px; +padding-left: 20px +} + +.bigSlidertabs .tab3 .tab_bg_3 { +width: 100%; +height: 53px; +background: url(/images/tab3_bg.png) 50% 0 no-repeat +} + +.bigSlidertabs .tab4 { +float: right; +height: 109px; +width: 300px +} + +.bigSlidertabs .tab4 .tab_bg_4 { +width: 100%; +height: 53px; +background: url(/images/tab4_bg.png) 50% 0 no-repeat +} + +table.infographic { +width: 100%; +padding: 0; +margin: 40px 0 0; +border-collapse: collapse; +border-spacing: 0 +} + +table.infographic td { +padding: 0 0 0 35px +} + +table.infographic .number_title { +font: bold 24px/24px roboto,sans-serif; +color: #0c559d +} + +table.infographic .icon_block { +position: relative; +z-index: 1; +height: 50px; +padding: 0 10px 0 50px +} + +table.infographic .icon_block .title { +font-weight: 700; +color: #444; +font-size: 15px; +font-family: 'roboto',sans-serif; +padding-top: 9px +} + +table.infographic .icon_block .title a { +font-weight: 700; +color: #333 +} + +table.infographic .number_descr { +font-size: 13px; +color: #333 +} + +table.infographic .icon_block { +position: relative; +z-index: 1; +height: 50px; +padding: 0 10px 0 50px +} + +table.infographic .icon_block .icon { +position: absolute; +z-index: 1; +left: 0; +top: 50%; +background-image: url(/images/sprites/index_bottom_info_icons.png); +background-repeat: no-repeat; +width: 30px; +height: 31px; +background-position: 0 -31px; +margin-top: -15px +} + +table.infographic .icon_block .warranty { +width: 30px; +height: 31px; +background-position: 0 0; +margin-top: -15px +} + +table.infographic .icon_block .discount { +width: 26px; +height: 26px; +background-position: 0 -63px; +margin-top: -13px +} + +table.infographic .icon_block .support { +width: 32px; +height: 32px; +background-position: 0 -90px; +margin-top: -16px +} + +.detail_recently_looked .carousel,.detail_recently_looked .jcarousel-container { +height: 415px +} + +.detail_recently_looked ul li { +height: 132px +} + +.detail_recently_looked ul li .img,.detail_recommended_block ul li .img { +width: 168px; +height: 100px; +text-align: center; +border-right: 1px dotted #b8b8b8; +margin: 0 15px 20px 0; +float: left +} + +.detail_recently_looked ul li .img { +width: 45%; +height: 100px +} + +.detail_recommended_block { +overflow: hidden; +background-color: #fff; +padding: 20px; +height: 335px; +border-radius: 5px +} + +.detail_recently_looked ul li .img img { +padding: 10px; +border-radius: 10px; +background-color: #fff +} + +.detail_recently_looked ul li .info { +margin-bottom: 0 +} + +.detail_recently_looked ul li .info,.detail_recommended_block ul li .info { +overflow: hidden; +margin: 0 0 5px +} + +.detail_recently_looked ul li .title { +min-height: 35px; +max-height: 65px; +overflow: hidden +} + +.detail_recently_looked ul li .title,.detail_recommended_block ul li .title { +font-size: 13px; +min-height: 45px; +padding: 5px 10px 0 0 +} + +.detail_recently_looked ul li .title a { +font-size: 13px +} + +.detail_recently_looked ul li .price,.detail_recommended_block ul li .price,nav .main_menu .popup_menu .top_product_month .top_product_month_block .price { +font-size: 16px; +font-weight: 700; +font-style: italic; +line-height: 20px; +color: #333; +font-family: Arial +} + +.detail_recently_looked ul li .price .currency,.detail_recommended_block ul li .price .currency,nav .main_menu .popup_menu .top_product_month .top_product_month_block .price .currency { +font-weight: 400; +font-style: italic; +padding-left: 5px +} + +.detail_recommended_block ul li .rating ul li,.product_detail .popular_carousel li .rating ul li,.detail_recently_looked ul li .rating ul li,.product_detail .hit .rating ul li,.product_detail .info .info_table .rating li,.product_detail .comments_list_carousel li .comment_block .rating ul li,.detail_main_tabs li.comments .rating li,.tip_comment_other_model .rating li,.catalog_product_list .rating ul li,.category_popular_list .catalog_item .rating ul li,.fresh_block .comment_block .rating ul li,.catalog_product_list .fast_view .main_info_part .rating ul li,.old_product_block .product .rating ul li,#compare .rating ul li { +float: left!important; +width: 10px; +height: 9px; +padding: 1px; +background: url(/images/sprites/icons.png) -13px -105px no-repeat; +background-repeat: no-repeat; +position: static; +border-radius: 0; +margin: 0 +} + +.detail_recommended_block ul li .rating ul li.active,.product_detail .popular_carousel li .rating ul li.active,.detail_recently_looked ul li .rating ul li.active,.product_detail .hit .rating ul li.active,.product_detail .comments_list_carousel li .comment_block .rating ul li.active,.detail_main_tabs li.comments .rating li.active,.tip_comment_other_model .rating li.active,.catalog_product_list .rating ul li.active,.category_popular_list .catalog_item .rating ul li.active,.fresh_block .comment_block .rating ul li.active,.catalog_product_list .fast_view .main_info_part .rating ul li.active { +background-position: -12px -93px +} + +.detail_recently_looked ul li .rating ul li.passive,.product_detail .info .info_table .rating li,.product_detail .comments_list_carousel li .comment_block .rating ul li,.detail_main_tabs li.comments .rating li.passive,.fresh_block .comment_block .rating ul li.passive,.catalog_product_list .fast_view .main_info_part .rating ul li.passive,.catalog_product_list .fast_view .tabs_part .comments .rating li.passive,.old_product_block .product .rating ul li.passive { +background: url(/images/sprites/icons_opacity.png) -28px -386px no-repeat +} + +.detail_recommended_block ul li table,.detail_recommended_block ul li table td { +width: 100%; +height: 100%; +border-collapse: collapse; +padding: 0; +margin: 0; +border-spacing: 0; +width: 100%; +height: 100%; +border-collapse: collapse; +padding: 0; +margin: 0; +border-spacing: 0 +} + +.detail_recommended_block ul li table td { +width: 50%; +vertical-align: top; +border-right: 1px dotted #b8b8b8 +} + +.detail_recommended_block ul li table td.even { +border: 0 +} + +.detail_recommended_block ul li .buy_button { +margin-top: -5px +} + +.detail_recommended_block ul li .img { +border: none +} + +.btn-buy { +display: inline-block; +padding: 4px 14px; +margin: 0; +margin-bottom: 0; +font-family: 'Roboto'; +font-size: 16px; +line-height: 20px; +color: #fff; +text-align: center; +vertical-align: middle; +cursor: pointer; +background-color: #256caf; +background-image: -webkit-gradient(linear,0 0,0 100%,from(#2175c2),to(#2668a5)); +background-image: -webkit-linear-gradient(top,#2175c2,#2668a5); +background-image: -o-linear-gradient(top,#2175c2,#2668a5); +background-image: linear-gradient(to bottom,#2175c2,#2668a5); +background-image: -moz-linear-gradient(top,#2175c2,#2668a5); +background-repeat: repeat-x; +border: 0; +border-top: 1px solid #256caf; +border-bottom: 1px solid #256caf; +-webkit-border-radius: 4px; +-moz-border-radius: 4px; +border-radius: 4px; +filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff2175c2',endColorstr='#ff2668a5',GradientType=0); +filter: progid:dximagetransform.microsoft.gradient(enabled=false); +-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); +-moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); +box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); +text-decoration: none +} + +.detail_search .input_part { +position: relative; +background-image: none; +z-index: 1; +margin: 0 0 20px +} + +.detail_search .submit { +float: right; +width: 73px; +height: 24px; +overflow: hidden +} + +.detail_search .submit input { +width: 100%; +cursor: pointer; +height: 24px; +padding: 0 +} + +.detail_search .submit input.btn-yellow { +line-height: 26px; +color: #fff; +text-shadow: 0 1px 0 #e67103; +background-color: #fe9d20; +background-image: -webkit-gradient(linear,0 0,0 100%,from(#fecc2e),to(#fe9d20)); +background-image: -webkit-linear-gradient(top,#fecc2e,#fe9d20); +background-image: -o-linear-gradient(top,#fecc2e,#fe9d20); +background-image: linear-gradient(to bottom,#fecc2e,#fe9d20); +background-image: -moz-linear-gradient(top,#fecc2e,#fe9d20); +border: 0; +filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fffecc2e',endColorstr='#fffe9d20',GradientType=0); +filter: progid:dximagetransform.microsoft.gradient(enabled=false); +-webkit-box-shadow: none; +-moz-box-shadow: none; +box-shadow: none; +-webkit-border-top-right-radius: 5px; +-webkit-border-bottom-right-radius: 5px; +-moz-border-radius-topright: 5px; +-moz-border-radius-bottomright: 5px; +border-top-right-radius: 5px; +border-bottom-right-radius: 5px +} + +.detail_search { +padding: 0 +} + +.detail_search .input_part { +height: 24px; +overflow: hidden; +background: #fff; +padding: 0 0 0 38px; +position: relative; +z-index: 1; +border-radius: 3px 0 0 3px +} + +.detail_search .input_part .input input { +background-color: #fff; +color: #333; +border: 0; +width: 100%; +height: 18px; +line-height: 18px; +padding: 3px 0; +outline: 0; +box-sizing: content-box +} + +.detail_search .input_part .icon { +position: absolute; +z-index: 1; +width: 13px; +height: 14px; +background: url(/images/sprites/icons.png) -18px -565px no-repeat; +left: 6px; +top: 5px +} + +.content { +background: #fff; +padding: 20px 14px; +-webkit-border-radius: 10px; +-moz-border-radius: 10px; +border-radius: 10px +} + +.content-mp h1,.content-mp h2,.content-mp h3,.content-mp h4,.content-mp h5,.content-mp h6 { +padding: 0 43px +} + +table.articles-list td { +padding: 0 40px +} + +table.articles-list td a { +font-size: 15px; +color: #006cb7 +} + +ul.parameters-list { +background: #fff; +padding: 10px 40px; +-webkit-border-radius: 10px; +-moz-border-radius: 10px; +border-radius: 10px +} + +ul.parameters-list li { +display: inline-block; +background: url(/images/parameters-list-marker.png) 0 50% no-repeat; +padding: 0 20px +} + +ul.parameters-list li a { +font-size: 16px; +color: #000; +text-decoration: none +} + +.fb-wrapper_ { +width: 100%; +float: left; +background: #fff; +padding-bottom: 80px +} + +.facebook_container { +background: #fff +} + +._h7l { +background: transparent!important; +border: 1px solid transparent!important +} + +footer { +float: left; +width: 100%; +margin-bottom: -40px +} + +footer .content-title { +display: block; +font-size: 16px; +color: #4b4b4b +} + +.fblock-content p { +font-size: 13px +} + +.fblock-content a { +font-size: 16px; +color: #19549d +} + +.fblock-content ul { +padding: 0 +} + +.fblock-content ul li { +list-style-type: none +} + +.seti-txt_ { +font-size: 14px; +color: #4b4b4b +} + +.footer-title_new { +font-weight: 700; +display: block; +font-size: 16px; +color: #4b4b4b; +margin-bottom: 10px +} + +.catalogs-link-footer { +font-size: 14px; +color: #0f6fc7!important; +position: relative; +text-decoration: none; +padding-left: 20px +} + +.catalogs-link-footer:before { +width: 13px; +height: 16px; +background: url(../images/new_img/ico/ico-10.png) no-repeat; +content: ''; +position: absolute; +top: 50%; +margin-top: -8px; +left: 0 +} + +.catalogs-link-footer:hover { +text-decoration: underline +} + +.style { +width: 100%; +float: left +} + +.new_vacancy { +list-style: none; +padding-left: 0; +margin: 0 +} + +.new_vacancy li { +width: 100%; +float: left; +padding-left: 11px; +position: relative; +font-size: 14px; +color: #4b4b4b +} + +.new_vacancy li:before { +position: absolute; +content: ''; +width: 5px; +height: 5px; +border-radius: 100%; +background: #a7acb0; +left: 0; +top: 50%; +margin-top: -2px +} + +.summary_footer { +font-size: 14px; +color: #4b4b4b; +width: 100%; +float: left; +margin-bottom: 0; +margin-top: 38px +} + +.mail-summary-footer { +font-size: 14px; +color: #0f6fc7!important; +text-decoration: none +} + +.footer_phones { +font-size: 22px; +color: #4b4b4b; +margin: 0 +} + +.footer_phones span { +color: #a7acb0 +} + +.footer-phones-wr tr td { +vertical-align: middle; +height: 28px +} + +.footer-phones-wr img { +vertical-align: middle +} + +.footer-phones-wr table tr td:first-child { +width: 26px +} + +.footer_callback { +font-size: 14px!important; +margin-top: 3px +} + +.box-studio-wr { +height: 48px; +margin-top: 20px; +background: #a7acb0 +} + +.box-studio-wr p { +margin: 0; +font-size: 13px; +color: #fff; +line-height: 48px +} + +.artweb-wr { +width: 100%; +float: right; +height: 48px; +position: relative +} + +.artweb-wr a { +height: 48px; +line-height: 48px; +text-decoration: underline; +font-size: 13px; +float: right; +margin-right: 36px; +color: #fff +} + +.artweb-img { +width: 24px; +height: 23px; +position: absolute; +right: 0; +top: 50%; +margin-top: -11px; +cursor: default +} + +.artweb-img a { +margin: 0; +padding: 0; +width: 24px; +height: 23px; +display: block +} + +.artweb-img img { +width: 100%; +height: 100%; +float: left +} + +.artweb-wr:hover a { +text-decoration: none +} + +.btn-fixeds { +position: fixed; +bottom: 0; +height: 44px; +width: 150px; +background: #fff; +box-shadow: 0 0 7px 0 rgba(0,0,0,0.35) +} + +.btn-fixeds a { +display: block; +width: 100%; +height: 100%; +line-height: 44px; +text-align: center; +text-decoration: none; +text-transform: uppercase; +font-size: 15px; +font-weight: 700 +} + +.fixed-events { +border-bottom: 3px solid #ed1c24; +right: 40px +} + +.fixed-events a { +color: #ed1c24 +} + +.fixed-sale { +border-bottom: 3px solid #01974a; +left: 40px +} + +.fixed-sale a { +color: #01974a +} + +.brbeadcrumbs-wr { +height: 83px; +line-height: 83px +} + +.section-posts-wr { +background: #fff; +padding-top: 47px; +padding-bottom: 47px +} + +.search-title { +font-size: 15px; +color: #4b4b4b; +text-transform: uppercase; +font-weight: 700 +} + +.blog-search .form-control { +height: 66px; +border: 16px solid #a7acb0; +margin-top: 10px; +outline: none!important; +border-radius: 0!important; +background: #fff!important +} + +input:-webkit-autofill,textarea:-webkit-autofill,select:-webkit-autofill { +background: #fff!important +} + +.blog-search .form-control:focus { +box-shadow: 1px 2px 2px 0 rgba(215,215,215,0.75) inset; +transition: .1s; +-webkit-transition: .1s +} + +.blog-search .new-btn-search { +top: 28px; +right: 16px +} + +.posts-title,.seo-text h2:first-child { +margin-top: 0 +} + +.seo-text h2,.seo-text h1,.seo-text h3,.posts-title { +text-transform: uppercase +} + +.seo-text h2,.posts-title { +font-size: 15px; +font-weight: 700; +margin-bottom: 0 +} + +.posts-margin { +margin-top: 47px +} + +.seo-text p { +font-size: 14px; +color: #4b4b4b; +margin-top: 19px; +margin-bottom: 0; +line-height: 18px +} + +.seo-text p:first-of-type { +margin-top: 10px +} + +.posts-links { +padding: 0 0 0 15px +} + +.posts-links li { +width: 100%; +float: left; +color: #a7acb0; +margin-top: 15px +} + +.posts-links li:first-child { +margin-top: 9px +} + +.posts-links li a { +color: #0f6fc7; +font-size: 14px +} + +.posts-line-wr { +margin-top: 17px +} + +.posts-line-wr a { +font-size: 13px; +color: #0f6fc7; +float: right; +padding: 0 13px 0 6px; +position: relative; +height: 16px; +display: block +} + +.posts-line-wr a:hover { +text-decoration: none!important; +opacity: .8 +} + +.posts-line-wr a:before { +width: 7px; +height: 7px; +background: url(../images/new_img/ico/ico-12.png) no-repeat; +content: ''; +position: absolute; +top: 50%; +margin-top: -3px; +right: 0 +} + +.all_seo_text:before { +height: 4px; +background: url(../images/new_img/ico/ico-13.png) no-repeat!important; +margin-top: -2px +} + +.all_seo_text.show:before { +transform: rotate(180deg); +-webkit-transform: rotate(180deg) +} + +.posts-line-wr div { +overflow: hidden +} + +.posts-line-wr div span { +width: 100%; +height: 12px; +border-bottom: 1px solid #e4e4e4; +display: block +} + +.posts-links { +overflow: hidden; +max-height: 399px; +margin-bottom: 0 +} + +.seo-text { +position: relative; +height: 399px; +overflow: hidden; +min-height: 415px +} + +.seo-text:before { +content: ''; +display: block; +position: absolute; +bottom: 0; +right: 0; +left: 0; +height: 45px; +background: -moz-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%); +background: -webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(255,255,255,0)),color-stop(100%,#fff)); +background: -webkit-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%); +background: -o-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%); +background: -ms-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%); +background: linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%) +} + +.seo-text.show { +height: auto +} + +.seo-text.show:before { +display: none +} + +.home-popular-wr { +margin-top: 28px +} + +.home-popular { +list-style: none +} + +.home-popular li { +float: left; +margin-left: 20px +} + +.home-popular li:first-child { +margin-left: 0 +} + +.home-popular li a { +text-decoration: none!important; +text-transform: uppercase!important; +color: #0f6fc7!important; +font-size: 15px!important; +font-weight: 700 +} + +.home-popular li.active a { +color: #4b4b4b!important +} + +.home-popular-slider { +margin-top: 6px +} + +.short-desc_wr { +padding: 0 15px; +margin-top: 19px +} + +.in_stock_wr { +font-size: 11px; +color: #a7acb0; +margin-top: 9px +} + +.in_stock_ { +float: left +} + +.in_stock_ span { +position: relative; +padding-left: 12px +} + +.yes_stock { +float: left +} + +.no_stock { +float: right +} + +.in_stock_ span:before { +left: 0; +top: 50%; +content: ''; +position: absolute +} + +.yes_stock:before { +width: 8px; +height: 6px; +margin-top: -3px; +background: url(../images/new_img/ico/ico-17.png) no-repeat +} + +.no_stock:before { +width: 6px; +height: 6px; +margin-top: -3px; +background: url(../images/new_img/ico/ico-18.png) no-repeat +} + +.title-sku { +float: right +} + +.title-name_ a,.title-name_ a p,.title-name_ a span { +margin: 0; +padding: 0 +} + +.title-name_ a { +display: block; +float: left; +color: #0f6fc7 +} + +.title-name_ a p { +font-size: 14px; +width: 100%; +height: 19px; +overflow: hidden; +float: left; +text-transform: lowercase +} + +.title-name_ a p:first-child { +font-size: 16px; +text-transform: none; +font-weight: 700; +height: 39px; +line-height: 19px +} + +.title-name_ a:hover p span { +border-bottom: 1px solid #0f6fc7 +} + +.currency_price { +display: block; +float: left; +line-height: 38px; +font-size: 16px; +color: #4b4b4b +} + +.price-basket { +float: right +} + +.price-basket a { +width: 38px; +height: 38px; +margin-right: 0 +} + +.price-basket-wr { +margin-top: 17px +} + +.home-popular-slider .owl-buttons .owl-prev,.home-popular-slider .owl-buttons .owl-next { +top: 0!important; +right: 38px!important; +left: auto!important; +width: 19px!important; +height: 19px!important; +border-radius: 100%!important; +background: none!important +} + +.home-popular-slider .owl-buttons .owl-prev:hover,.home-popular-slider .owl-buttons .owl-next:hover { +background: #a7acb0!important +} + +.home-popular-slider .owl-buttons .owl-prev:before,.home-popular-slider .owl-buttons .owl-next:before { +background: url(../images/new_img/ico/ico-19.png)!important; +background-repeat: no-repeat!important; +width: 5px!important; +height: 9px!important; +top: 50%!important; +left: 50%!important; +margin-top: -5px!important; +margin-left: -3px!important +} + +.home-popular-slider .owl-buttons .owl-prev:before { +background-position: 0 0!important +} + +.home-popular-slider .owl-buttons .owl-next:before { +background-position: -5px 0!important +} + +.home-popular-slider .owl-buttons .owl-next { +right: 13px!important +} + +.home-popular-slider .owl-buttons .owl-prev:hover:before,.home-popular-slider .owl-buttons .owl-next:hover:before { +background: url(../images/new_img/ico/ico-20.png)!important +} + +.home-popular-slider .owl-buttons .owl-next:hover:before { +background-position: -5px 0!important +} + +.new-slider-wr .item { +width: 100%; +text-align: center +} + +.new-slider-wr .owl-buttons { +display: none +} + +#prev_slide,#next_slide { +position: absolute; +top: 50%; +margin-top: -38px; +width: 32px; +height: 76px; +background: rgba(0,0,0,0.2); +border-radius: 4px; +cursor: pointer +} + +#prev_slide:hover,#next_slide:hover { +background: rgba(0,0,0,0.8) +} + +#prev_slide:before,#next_slide:before { +position: absolute; +content: ''; +width: 14px; +height: 24px; +top: 50%; +left: 50%; +margin-top: -12px; +margin-left: -7px; +background: url(../images/new_img/ico/ico-14.png); +background-repeat: no-repeat +} + +#prev_slide:before { +background-position: 0 0 +} + +#next_slide:before { +background-position: -14px 0 +} + +#prev_slide { +left: 20px +} + +#next_slide { +right: 20px +} + +.call_block,.call_block_header { +position: relative +} + +.call_block_header { +width: 290px; +margin-top: 12px +} + +.call_block .call_block_title,.call_block_header .call_block_header_title { +float: left; +display: block; +font-size: 16px; +text-transform: uppercase; +font-weight: 700; +line-height: 22px; +height: 24px; +color: #2e2e2e +} + +.call_block_header .call_block_header_title { +display: inline-block; +margin-right: 10px; +text-transform: none +} + +.call_block a.city-phone,.call_block_header a.city-phone-header { +position: relative; +color: #0156a9; +text-decoration: none; +border-bottom: 1px dashed #145597; +cursor: pointer +} + +.call_block_header a.city-phone-header { +border: none +} + +.dropdown-popup.popup-city-phones,.dropdown-popup-header.popup-city-phones { +top: 20px; +left: 90px +} + +.hide_city_block,.hide_city_block_header { +display: none +} + +.popup-city-phones p,.popup-city-phones-header p { +margin: 12px +} + +.call_block .call_block_title > span.arr,.call_block_header .call_block_header_title > span.arr { +background: url(/images/sprites/arrows.png) 0 -24px no-repeat; +display: inline-block; +width: 7px; +height: 4px; +margin: 5px 0 0 +} + +.call_block .phone-select,.call_block_header .phone-select-header { +display: flex; +float: left; +margin: 5px 5px 5px 0; +width: 60px +} + +.call_block_header .phone-select-header { +margin-right: 10px; +margin-top: 3px +} + +.call_block .phone,.call_block_header .phone { +font-size: 21px; +line-height: 24px; +color: #390; +white-space: nowrap; +width: 140px; +cursor: pointer +} + +.call_block_header .phone { +font-size: 18px +} + +.city_blocks_header,.phones-header { +display: inline-block +} + +.call_block_header .phone { +width: 130px; +display: inline-block +} + +.call_block .phone.hide-operator,.call_block_header .phone.hide-operator { +display: none +} + +.call_block .phone span { +font-size: 13px; +color: #443d35 +} + +.call_block_header .phone span { +font-size: 18px; +color: #999 +} + +.call_block .phone-select .select-left-landline,.call_block .phone-select .select-left-life,.call_block .phone-select .select-left-mts,.call_block .phone-select .select-left-kstar { +background: url(/images/sprites/head_phones_icons.png) 0 -150px no-repeat; +height: 21px; +width: 39px; +cursor: pointer +} + +.call_block_header .phone-select-header .select-left-landline,.call_block_header .phone-select-header .select-left-life,.call_block_header .phone-select-header .select-left-mts,.call_block_header .phone-select-header .select-left-kstar { +float: left; +display: block; +background: url(/images/sprites/head_phones_header_icons.png) 0 -150px no-repeat; +height: 21px; +width: 39px; +cursor: pointer +} + +.call_block .phone-select .select-right { +background: url(/images/sprites/head_phones_icons.png) 0 -234px no-repeat; +cursor: pointer; +height: 21px; +width: 19px +} + +.call_block_header .phone-select-header .select-right { +display: inline-block; +background: url(/images/sprites/head_phones_header_icons.png) 0 -234px no-repeat; +cursor: pointer; +height: 21px; +width: 19px +} + +.call_block .request_callback a,.call_block_header .request_callback a { +color: #0156a9; +text-decoration: none; +border-bottom: 1px dashed #145597 +} + +.dropdown-popup,.dropdown-popup-header { +top: 50px; +position: absolute; +z-index: 2; +-webkit-border-radius: 5px; +border-radius: 5px; +background-color: #fff; +border: 1px solid #d3d3d3; +display: none +} + +.popup-phone-operators p,.popup-phone-operators-header p { +padding: 3px 0 0 22px; +margin: 10px; +background: url(/images/sprites/head_phones_icons.png) 0 0 no-repeat; +text-align: left +} + +.popup-phone-operators p span,.popup-city-phones p span,.popup-phone-operators-header p span,.popup-city-phones-header p span { +color: #0c549c; +cursor: pointer; +border-bottom: 1px dashed #0c549c; +font-size: 1em; +position: relative; +top: -3px +} + +.popup-phone-operators p.life,.popup-phone-operators-header p.life { +background-position: 0 -29px +} + +.popup-phone-operators p.kstar,.popup-phone-operators-header p.kstar { +background-position: 0 -59px +} + +.popup-phone-operators p.landline,.popup-phone-operators-header p.landline { +background-position: 0 -89px +} + +.call_block .phone-select .select-left-mts,.call_block_header .phone-select-header .select-left-mts { +background-position: 0 -192px +} + +.call_block .phone-select .select-left-kstar,.call_block_header .phone-select-header .select-left-kstar { +background-position: 0 -213px +} + +.call_block .phone-select .select-left-life,.call_block_header .phone-select-header .select-left-life { +background-position: 0 -171px +} + +footer .soc li { +float: left; +margin: 0 0 0 15px +} + +footer .soc li:first-child { +margin-left: 0 +} + +footer .soc li a { +float: left; +width: 31px; +height: 31px; +background-image: url(/images/sprites/icons.png); +background-repeat: no-repeat; +border-radius: 3px +} + +footer .soc li a.facebook { +background-position: 0 0 +} + +footer .soc li a.vkontakte { +background-position: 0 -31px +} + +footer .soc li a.twitter { +background-position: 0 -62px +} + +footer .soc li a.youtube { +background-position: 0 -518px +} + +footer .soc li a.google { +background-position: 0 -757px +} + +.copy { +color: #000; +font-size: 13px; +margin: 5px 0 +} + +ul.copy { +padding: 0 15px +} + +.first_list_copy { +margin-top: 30px +} + +ul.copy li { +display: block; +float: left +} + +.first_list_copy li { +margin: 0 15px +} + +.first_list_copy li:first-child { +margin-left: 0 +} + +ul.copy li a { +color: #0f6fc7; +font-size: 13px +} + +.second_list_copy li { +position: relative; +padding: 0 +} + +.second_list_copy li a { +font-size: 12px; +padding: 0 5px; +position: relative +} + +.second_list_copy li:nth-child(2) { +padding-left: 0 +} + +.second_list_copy li a:before { +position: absolute; +content: ''; +width: 1px; +height: 12px; +background: #0f6fc7; +left: 0; +top: 50%; +margin-top: -6px +} + +.second_list_copy li:nth-child(2) a:before,.second_list_copy li:first-child a:before { +display: none +} + +ul.cats_and_prices { +display: inline-block; +background: #666; +color: #fff; +padding: 10px 20px; +margin: 0 +} + +ul.cats_and_prices li { +display: inline-block; +margin: 0 5px +} + +ul.cats_and_prices li a { +color: #fff; +text-transform: uppercase; +text-decoration: none +} + +footer .vacancies ul { +margin-left: 20px!important +} + +footer .vacancies ul li { +list-style-type: circle!important +} + +footer .vacancies p { +font-size: 14px +} + +.up_arr { +width: 88px; +background-color: #e5e5e5; +text-align: center; +height: 48px; +position: fixed; +right: 20px; +bottom: 80px; +z-index: 2000; +border: 2px solid #fff; +box-shadow: 0 0 5px rgba(0,0,0,0.2); +display: none; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px +} + +.up_arr a { +text-decoration: none +} + +.up_arr a .icon { +width: 16px; +height: 11px; +background: url(/images/sprites/icons.png) 0 -664px no-repeat; +position: absolute; +z-index: 1; +left: 50%; +top: 9px; +margin-left: -8px +} + +.up_arr a .text { +border-bottom: 1px dashed #333; +color: #333; +display: block; +font-size: 12px; +line-height: 15px; +margin: 0 auto; +padding-top: 25px; +width: 50px +} + +.up_arr a:hover .text { +border-bottom: none +} + +.breadcrumbs { +line-height: 20px; +font-size: 14px; +margin: 10px 0; +font-family: 'Roboto',sans-serif +} + +.breadcrumbs ul li.has_link { +cursor: pointer +} + +.breadcrumbs ul li.bread_item { +display: inline-block; +position: relative; +z-index: 10; +color: #333; +margin: 0 5px 0 0 +} + +.breadcrumbs li.bread_item > a { +color: #0156a9 +} + +.filters,.columnLeftInfo { +width: 95%; +max-width: 300px +} + +.filters,.columnLeftInfo img { +max-width: 100% +} + +.columnLeftInfo .prodview { +background: #f5f5f5; +border-radius: 4px; +overflow: hidden; +font: 12px/16px Arial; +margin: 20px 0 +} + +.columnLeftInfo .prodview ul { +padding: 0 +} + +.columnLeftInfo .prodview ul li { +padding: 10px 20px 5px; +border-bottom: 1px solid #dbdbdb; +list-style-type: none +} + +.columnLeftInfo .prodview ul li:last-child { +border-bottom: none +} + +.columnLeftInfo .prodview ul li a { +font-size: 12px; +font-weight: 700; +color: #333; +margin: 0 0 10px +} + +.pv_title { +font-size: 20px; +font-weight: 700; +padding: 10px 20px 5px +} + +.filters .properties { +background: #f5f5f5; +border-radius: 4px; +font: 12px/16px Arial +} + +.filters .properties .tab.active_tab { +display: block +} + +.filters .properties .properties_block { +padding: 10px 20px 5px; +border-bottom: 1px solid #dbdbdb +} + +.filters .properties .properties_block .block_title { +font-size: 12px; +font-weight: 700; +color: #333; +margin: 0 0 10px +} + +.filters .properties .properties_block .inpt { +float: left; +width: 55px; +margin-bottom: 20px; +-webkit-box-sizing: content-box; +-moz-box-sizing: content-box; +box-sizing: content-box +} + +.filters .properties .properties_block .inpt input { +text-align: center; +color: #333; +font-size: 11px +} + +.filters .properties .properties_block .finput { +display: inline-block +} + +.filters .properties .properties_block button.sok { +display: inline-block +} + +.filters .properties .properties_block .mdash { +float: left; +padding: 0 10px; +line-height: 30px; +color: #666 +} + +.filters .properties .properties_block .grn { +font-size: 11px; +line-height: 30px; +color: #c2c2c2; +float: left; +padding: 0 0 0 10px +} + +.filters .properties .properties_block { +padding: 10px 20px 5px; +border-bottom: 1px solid #dbdbdb +} + +.filters .properties .properties_block .chechboxes { +padding: 0; +margin: 0; +list-style: none +} + +.filters .properties .properties_block .chechboxes li { +position: relative; +z-index: 1; +padding: 0 0 0 20px; +margin: 0 0 5px; +line-height: 15px; +color: #333 +} + +.filters .properties .properties_block .chechboxes li input { +padding: 0; +margin: 1px 5px 0 0; +float: left +} + +.filters .properties .properties_block .chechboxes li div { +overflow: hidden +} + +.filters .properties .properties_block .chechboxes li label { +display: inline-block +} + +.filters .properties .properties_block .chechboxes li label a { +color: #0156a9; +text-decoration: none; +border-bottom: 1px dotted #0156a9 +} + +.inpt { +height: 18px; +line-height: 18px; +padding: 4px; +border-radius: 4px; +border-top: 1px solid #d9d9d9; +border-left: 1px solid #e4e4e4; +border-right: 1px solid #e4e4e4; +border-bottom: 1px solid #e9e9e9; +background-color: #fff +} + +.inpt input { +width: 100%; +height: 18px; +line-height: 18px; +background: transparent; +border: 0 +} + +.ui-slider { +border: 1px solid #aaa; +height: 11px; +font-size: 1px; +position: relative; +z-index: 1; +background-color: #fff; +border-radius: 4px +} + +.ui-slider-range { +position: absolute; +z-index: 1; +left: 0; +top: 0; +height: 100%; +background-color: #e2e2e2; +border-radius: 3px +} + +.filters .properties .properties_block .ui-slider { +border: none; +height: 3px; +background: #c2c2c2; +box-shadow: 0 1px 0 #a6a6a6 inset; +border-radius: 3px; +margin: 0 0 5px +} + +.filters .properties .properties_block .ui-slider-range { +background: #0156a9 +} + +.ui-slider-handle { +position: absolute; +z-index: 2; +outline: 0; +border: 1px solid #d3d3d3; +margin-left: -9px; +top: -3px; +cursor: default; +height: 16px; +width: 16px; +border-radius: 4px; +background: #ededed; +background: -moz-linear-gradient(top,#ededed 0,#e6e6e6 100%); +background: -webkit-gradient(linear,left top,left bottom,color-stop(0,#ededed),color-stop(100%,#e6e6e6)); +background: -webkit-linear-gradient(top,#ededed 0,#e6e6e6 100%); +background: -o-linear-gradient(top,#ededed 0,#e6e6e6 100%); +background: -ms-linear-gradient(top,#ededed 0,#e6e6e6 100%); +background: linear-gradient(to bottom,#ededed 0,#e6e6e6 100%); +filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#e6e6e6',GradientType=0) +} + +.filters .properties .properties_block .ui-slider-handle { +width: 13px; +height: 11px; +background: url(/images/sprites/filter_icons.png) -13px -16px no-repeat; +border: none; +filter: none; +margin-left: -6px; +top: -14px; +cursor: e-resize; +border-radius: 0 +} + +.sliderblock { +position: relative +} + +.sliderblock .sliderblock-name { +float: left; +padding-right: 10px; +padding-top: 7px; +font-weight: 700 +} + +.filters .properties .properties_block.opened .block_title,.filters .properties .properties_block.closed .block_title { +position: relative; +z-index: 1; +cursor: pointer +} + +.filters .properties .properties_block.closed .block_title i,.filters .properties .properties_block.opened .block_title i { +position: absolute; +z-index: 1; +left: -10px; +top: 0; +border-color: #f5f5f5 transparent; +background-color: #909090; +border-style: solid; +border-width: 4px 0 4px 4px; +margin: 3px 10px 0 0 +} + +.filters .properties .properties_block.opened .block_title i { +border-width: 4px 4px 0; +border-color: #909090 transparent; +background: #f5f5f5; +left: -12px; +top: 3px +} + +.filters .properties .button { +padding: 10px; +text-align: center +} + +.filters .properties .button .disabled { +display: none +} + +.filter_tooltip { +z-index: 1000; +position: absolute; +right: -120px; +top: 0; +text-align: left; +border: 1px solid #d3d3d3; +border-radius: 4px; +-moz-border-radius: 4px; +-webkit-border-radius: 4px; +padding: 6px 8px; +min-width: 50px; +max-width: 300px; +color: #696969; +background-color: #fff; +box-shadow: 1px 1px 2px #ccc +} + +.filter_tooltip.width_slider { +top: 60px +} + +.filter_tooltip.depth_slider { +top: 120px +} + +.btn.btn-small { +font-size: 12px; +padding: 0 10px +} + +.price_tooltip_close { +float: right; +width: 15px; +height: 15px; +margin: -6px -5px 0 0; +background: url(/images/sprites/filter_icons.png) 0 0 no-repeat; +cursor: pointer; +text-decoration: none +} + +.tip-arrow.tip-arrow-left { +margin-top: -5px; +margin-left: -6px; +top: 50%; +left: 0; +width: 6px; +height: 12px; +background: url(/images/sprites/tip-white.png) no-repeat 0 0; +position: absolute +} + +.price_tooltip_close { +position: static; +float: right; +margin: 3px 0 0 10px +} + +#filters_main .buttonReset { +text-align: right; +padding: 5px 10px; +margin-top: 20px; +text-decoration: underline +} + +#filters_main .buttonReset i { +display: inline-block; +float: none; +z-index: 1; +right: 0; +top: 50%; +margin: -7px 0 0 5px; +width: 15px; +height: 15px; +background: url(/images/sprites/filter_icons.png) 0 0 no-repeat; +cursor: pointer; +text-decoration: none +} + +.cat-content .title { +margin: 5px 0 10px +} + +.list_filters_links { +position: relative; +z-index: 1; +border-bottom: 1px solid #ccc; +padding: 0 0 5px; +margin: 0 0 30px +} + +.list_filters_links .view_type { +padding: 0; +margin: 0; +list-style: none; +float: right +} + +.list_filters_links .view_type li { +float: left; +margin: 0 0 0 10px +} + +.list_filters_links .view_type li.view_text { +font-size: 12px; +color: #626262; +line-height: 21px; +margin: 0 +} + +.list_filters_links .view_type li.view_list,.list_filters_links .view_type li.view_table,.list_filters_links .view_type li.view_fast,.list_filters_links .view_type li.view_short,.list_filters_links .view_type li.view_mini_table { +width: 21px; +height: 21px; +background: #ededed; +border-radius: 2px; +position: relative; +z-index: 1; +cursor: pointer +} + +.list_filters_links .view_type li.view_list.selected,.list_filters_links .view_type li.view_table.selected,.list_filters_links .view_type li.view_mini_table.selected,.list_filters_links .view_type li.view_fast.selected,.list_filters_links .view_type li.view_short.selected { +background: #bcbcbc; +cursor: default +} + +.list_filters_links .view_type li.view_list span,.list_filters_links .view_type li.view_table span,.list_filters_links .view_type li.view_fast span,.list_filters_links .view_type li.view_short span,.list_filters_links .view_type li.view_mini_table span { +position: absolute; +z-index: 1; +width: 15px; +height: 15px; +background-image: url(/images/sprites/icons.png); +background-repeat: no-repeat; +left: 3px; +top: 3px +} + +.list_filters_links .view_type li.view_list span { +background-position: -16px -801px +} + +.list_filters_links .view_type li.view_table span { +background-position: 0 -801px +} + +.list_filters_links .view_type li.view_mini_table span { +background-position: -16px -841px +} + +.list_filters_links .sort_links li { +float: left; +margin: 0 25px 0 0; +font-size: 13px; +line-height: 21px; +position: relative; +z-index: 1; +list-style-type: none +} + +.list_filters_links .sort_links li a { +color: #333; +text-decoration: underline +} + +.list_filters_links .sort_links li.selected a,.list_filters_links .sort_links li a:hover { +color: #999; +text-decoration: none +} + +.list_filters_links .sort_links li.selected .arr { +display: block +} + +.list_filters_links .sort_links li .arr { +position: absolute; +z-index: 1; +width: 25px; +height: 13px; +background: url(/images/sprites/icons.png) 0 -788px no-repeat; +left: 50%; +top: 26px; +margin-left: -12px; +display: none +} + +.list_filters_links .sort_links li.selected a { +cursor: default +} + +.list_filters_links .pagination { +float: right; +margin: 0 0 0 25px; +font-size: 13px; +line-height: 21px; +position: relative; +z-index: 1; +list-style-type: none +} + +.list_filters_links .pagination select,.list_filters_links .pagination li { +display: inline-block +} + +.catalog_product_list { +margin: 0 0 20px +} + +.slider_mp_items .catalog_product_list { +margin: 0 +} + +.catalog_product_list.view_table .catalog_item,.category_popular_list .catalog_item { +float: left; +width: 33%; +height: 420px; +margin: 0 0 10px; +position: relative; +z-index: 1 +} + +.catalog_product_list .catalog_item.home_slider_it { +height: 425px; +border: 1px solid #e4e4e4; +float: none; +margin: 0 +} + +.catalog_product_list.view_table.view_list .catalog_item { +width: 100%; +border: none +} + +.catalog_product_list.view_table.view_mini_table .catalog_item { +float: left; +width: 14% +} + +.catalog_product_list.view_table .catalog_item .wrapper,.category_popular_list .catalog_item .wrapper { +position: absolute; +z-index: 1; +width: 100%; +min-height: 360px; +height: 360px; +overflow: hidden; +left: 0; +top: 0; +border-radius: 4px; +background: #fff; +-webkit-box-sizing: content-box!important; +-moz-box-sizing: content-box!important; +box-sizing: content-box!important +} + +.catalog_product_list .catalog_item.home_slider_it .wrapper { +position: relative; +z-index: 1; +width: 100%; +height: 100%; +min-height: 100%; +overflow: hidden; +background: #fff; +left: auto; +top: auto; +border-radius: 0; +box-sizing: border-box!important +} + +.status_block-wr { +position: absolute; +top: 20px; +left: 20px; +width: 42px; +height: 42px; +z-index: 999 +} + +.staus_new,.staus_hit,.status_sale { +position: absolute; +top: 0; +left: 0; +width: 100%; +height: 100%; +border-radius: 100%; +overflow: hidden +} + +.staus_new { +background: url(../images/new_img/ico/ico-15.png) no-repeat +} + +.staus_hit { +background: url(../images/new_img/ico/ico-16.png) no-repeat +} + +.status_sale { +background: #e22229; +color: #fff; +text-align: center; +font-size: 14px; +font-weight: 700; +line-height: 42px; +cursor: pointer +} + +.catalog_product_list.view_table.view_list .catalog_item .wrapper { +height: 300px; +min-height: 300px +} + +.catalog_product_list.view_table.view_mini_table .wrapper { +min-height: 270px; +height: 270px +} + +.catalog_product_list.view_table .catalog_item:hover,.category_popular_list .catalog_item:hover { +z-index: 1999 +} + +.catalog_product_list.view_table .catalog_item .wrapper:hover { +box-shadow: 0 0 5px #ccc; +padding: 0 20px; +margin-left: -20px +} + +.catalog_product_list.view_table .catalog_item.home_slider_it .wrapper:hover { +padding: 0; +margin-left: 0 +} + +.catalog_product_list.view_table .catalog_item.home_slider_it:hover { +box-shadow: 0 0 12px 0 rgba(0,0,0,0.35); +padding: 0; +margin-left: 0 +} + +.catalog_product_list.view_table .catalog_item .wrapper:hover { +height: auto +} + +.catalog_item.home_slider_it .img a { +display: table-cell; +width: 172px; +height: 258px; +vertical-align: middle; +float: none +} + +.catalog_product_list.view_table .catalog_item .wrapper .item_container,.category_popular_list .catalog_item .wrapper .item_container { +padding: 15px 5px +} + +.catalog_product_list .catalog_item.home_slider_it .wrapper .item_container { +height: 100%; +padding: 0 +} + +.slider_mp_items .owl-carousel .owl-item { +padding: 7px 15px 30px +} + +.catalog_product_list .catalog_item .img,.category_popular_list .catalog_item .img { +min-height: 205px +} + +.catalog_product_list .img,.category_popular_list .catalog_item .img { +margin: 0 0 10px; +position: relative; +z-index: 1 +} + +.catalog_product_list.view_table.view_list .img,.category_popular_list.view_table.view_list .catalog_item .img { +float: left; +width: 20%; +position: inherit +} + +.catalog_product_list .catalog_item .img img,.category_popular_list .catalog_item .img img { +max-width: 250px; +max-height: 250px; +min-height: 15px; +display: block; +margin: 0 auto +} + +.catalog_product_list .catalog_item .img img.selected,.category_popular_list .catalog_item .img img.selected { +display: block +} + +.catalog_product_list .catalog_item.home_slider_it .img img { +max-width: 172px; +max-height: 258px; +margin: 0 auto; +vertical-align: middle; +display: block +} + +.catalog_product_list .catalog_item.home_slider_it .img { +height: 258px; +display: table; +margin: 0 auto; +margin-top: 9px +} + +.catalog_product_list .catalog_item .img img.selected,.category_popular_list .catalog_item .img img.selected { +display: block +} + +.catalog_product_list.view_table.view_list .catalog_item .img img.selected { +max-width: 100%; +height: auto +} + +.catalog_product_list.view_table .info_icons { +display: none +} + +.catalog_product_list.view_table.view_list .info_icons { +display: block +} + +.catalog_product_list.view_table .catalog_item:hover .info_icons,.category_popular_list .catalog_item:hover .info_icons { +display: block +} + +.catalog_product_list.view_table .info_icons .btn { +display: inline-block; +padding: 4px 14px; +margin: 0; +margin-bottom: 0; +font-family: 'Roboto'; +font-size: 16px; +line-height: 20px; +color: #fff; +text-align: center; +vertical-align: middle; +cursor: pointer; +background-color: #256caf; +background-image: -webkit-gradient(linear,0 0,0 100%,from(#2175c2),to(#2668a5)); +background-image: -webkit-linear-gradient(top,#2175c2,#2668a5); +background-image: -o-linear-gradient(top,#2175c2,#2668a5); +background-image: linear-gradient(to bottom,#2175c2,#2668a5); +background-image: -moz-linear-gradient(top,#2175c2,#2668a5); +background-repeat: repeat-x; +border: 0; +border-top: 1px solid #256caf; +border-bottom: 1px solid #256caf; +-webkit-border-radius: 4px; +-moz-border-radius: 4px; +border-radius: 4px; +filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff2175c2',endColorstr='#ff2668a5',GradientType=0); +filter: progid:dximagetransform.microsoft.gradient(enabled=false); +-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); +-moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); +box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); +text-decoration: none +} + +.catalog_product_list.view_table .info_icons,.category_popular_list .catalog_item .info_icons,.catalog_product_list .brand_logo { +position: absolute; +z-index: 1; +right: 0; +bottom: -30px; +background: #fff; +box-shadow: 0 0 3px 5px #fff +} + +.catalog_product_list.view_table.view_list .info_icons { +background: transparent; +box-shadow: none; +top: 20px; +right: 20px; +bottom: inherit; +height: 100% +} + +.catalog_product_list.view_mini_table .info_icons { +width: 100px +} + +.catalog_product_list.view_mini_table .info_icons .btn { +width: 100% +} + +.catalog_product_list.view_table .users_info,.category_popular_list .catalog_item .users_info { +border-bottom: 1px dotted #ccc; +padding: 0 0 5px; +margin: 0 0 10px +} + +.catalog_product_list.view_table .catalog_item .title,.category_popular_list .catalog_item .title { +font-size: 16px; +line-height: 19px; +height: 39px; +overflow: hidden; +margin: 0 0 5px +} + +.catalog_product_list.view_table .catalog_item .spec_name { +background: red; +color: #fff; +position: absolute; +top: 125px; +font-size: 20px; +padding: 10px 20px; +z-index: 9; +border-top-right-radius: 15px +} + +.catalog_product_list.view_table.view_list .catalog_item .title { +display: none +} + +.catalog_product_list.view_table.view_mini_table .catalog_item .title { +display: none +} + +.catalog_product_list.view_table.view_mini_table .catalog_item:hover .title { +display: block +} + +.catalog_product_list.view_table .catalog_item .title a,.category_popular_list .catalog_item .title a { +color: #333; +text-decoration: none; +font-family: 'roboto',sans-serif +} + +.catalog_product_list .price,.category_popular_list .catalog_item .price { +font-size: 11px; +margin: 0 0 5px; +color: #333; +position: relative +} + +.old_price-wr { +position: absolute; +left: 0; +top: -18px +} + +.catalog_product_list.view_list .price { +display: none +} + +.catalog_product_list .price span,.category_popular_list .catalog_item .price span { +font-size: 16px; +font-family: roboto,sans-serif; +font-weight: bolder +} + +.catalog_product_list .additional_info.params,.category_popular_list .catalog_item .additional_info.params { +border-color: #fff; +border: none; +padding: 0; +border-top: 1px dotted #ccc; +padding: 5px 0 0 0; +margin: 15px 0 0 +} + +.catalog_product_list.view_list .additional_info.params,.category_popular_list.view_list .catalog_item .additional_info.params { +border: none; +float: left; +width: 80% +} + +.catalog_product_list.view_list .additional_info.params .additional_title { +font-weight: 700; +font-size: 20px; +display: block!important; +margin-bottom: 20px +} + +.catalog_product_list.view_list .additional_info.params .additional_title a { +color: #000 +} + +.catalog_product_list.view_list .additional_info.params .price { +display: block!important +} + +.catalog_product_list .additional_info.params .block_title { +font-weight: 700 +} + +.catalog_product_list.view_table .catalog_item .opacity_bg,.category_popular_list .catalog_item .opacity_bg { +background: url(/images/subrubric_opacity_bg.png) repeat-x scroll 0 0; +bottom: 0; +height: 20px; +left: 0; +position: absolute; +width: 100%; +z-index: 2 +} + +.catalog_product_list .additional_info.params .descr ul,.category_popular_list .catalog_item .additional_info.params .descr ul { +padding: 0; +margin-top: 10px +} + +.catalog_product_list .additional_info.params .descr ul li,.category_popular_list .catalog_item .additional_info.params .descr ul li { +list-style-type: none; +line-height: 17px; +padding: 0 0 5px +} + +.catalog_product_list .additional_info.params .descr ul span,.category_popular_list .catalog_item .additional_info.params .descr ul span { +color: #999 +} + +.catalog_product_list.view_table .info_icons .wishlike_block,.category_popular_list .catalog_item .info_icons .wishlike_block { +overflow: hidden; +float: left; +margin: 0 0 0 7px; +width: 85px +} + +.catalog_product_list.view_table.view_list .info_icons .wishlike_block { +position: absolute; +bottom: 50px; +display: none +} + +.catalog_product_list.view_table .info_icons .buy_button,.category_popular_list .catalog_item .info_icons .buy_button { +float: right +} + +.catalog_product_list.view_table .info_icons .wishlike_block li,.category_popular_list .catalog_item .info_icons .wishlike_block li { +position: relative; +font-size: 10px; +display: block; +margin-right: 0 +} + +.catalog_product_list .wishlike_block li .icon,.category_popular_list .catalog_item .wishlike_block li .icon { +width: 13px; +height: 11px; +background-image: url(/images/sprites/icons_opacity.png); +background-repeat: no-repeat; +position: absolute; +z-index: 1; +left: 0; +top: 2px; +float: left +} + +.catalog_product_list .wishlike_block li .like,.category_popular_list .catalog_item .wishlike_block li .like,.catalog_product_list .wishlike_block li .compare,.category_popular_list .catalog_item .wishlike_block li .compare { +text-decoration: none; +border-bottom: 1px dashed #0156a9; +color: #0156a9; +margin: 0 0 0 20px +} + +.catalog_product_list .wishlike_block li.compare .icon,.category_popular_list .catalog_item .wishlike_block li.compare .icon { +background-position: 0 -302px +} + +.catalog_product_list .wishlike_block li.like .icon,.category_popular_list .catalog_item .wishlike_block li.like .icon { +background-position: 0 -314px +} + +.catalog_product_list .privilages { +display: none; +border-left: 2px solid #289328; +padding: 2px 5px 2px 10px +} + +.catalog_product_list.view_table .catalog_item:hover .privilages { +display: block +} + +.catalog_product_list .privilages .priv_title { +color: #289328; +font-size: 13px; +font-weight: 700 +} + +.catalog_product_list .privilages p { +margin: 5px 0 0; +color: #999; +font-size: 11px +} + +.catalog_product_list .block_product_status { +text-decoration: underline; +color: #999; +position: relative; +float: right; +margin-bottom: -15px +} + +.catalog_product_list .block_product_status.av_none { +color: #930 +} + +.catalog_product_list .block_product_status.av,.catalog_product_list .additional_info.params .descr ul span.delivery_status { +color: #390 +} + +.delivery_status { +color: #390; +display: block; +padding-top: 4px +} + +.catalog_product_list .delivery_status img { +margin-top: -3px; +color: #999 +} + +.let_me_know { +border: 1px solid #ffb472; +background-color: #fff; +border-radius: 3px; +padding: 10px; +text-align: center; +font-size: 12px; +margin: 0 0 5px +} + +.catalog_product_list.view_table .catalog_item .let_me_know,.category_popular_list .catalog_item .let_me_know { +position: absolute; +z-index: 1; +right: 0; +bottom: -30px; +background: #fff; +border-radius: 4px; +padding: 2px 7px; +width: 87px +} + +.let_me_know a { +text-decoration: none; +color: #ff3c00; +border-bottom: 1px dashed #ff3c00; +font-size: 11px +} + +.catalog_product_list .sticker,.category_popular_list .sticker { +position: absolute; +z-index: 1; +left: 0; +bottom: 0; +background: #1eb600; +line-height: 18px; +padding: 0 7px; +border-radius: 2px; +color: #fff +} + +.catalog_product_list .sticker.saled,.category_popular_list .catalog_item .sticker.saled { +background: #d4d4d4; +color: #333; +font-size: 11px +} + +.paginator { +float: left; +margin: 40px 0 80px; +padding-right: 50px; +text-align: right; +width: 100% +} + +.paginator a { +color: #000; +background: #ededed; +border: 1px solid #bababa +} + +.paginator span.selected { +border-color: #ccc +} + +.paginator .points { +padding: 0 10px +} + +#myItemCarousel .item { +padding: 35px 50px +} + +#myItemCarousel .carousel-control.left,#myItemCarousel .carousel-control.right { +background: none +} + +#myItemCarousel .carousel-control { +width: 51px; +height: 157px +} + +#myItemCarousel .carousel-control-nav { +position: absolute; +top: 0; +width: 51px; +height: 157px; +background: url(/images/slider_nav2.png) 0 0 no-repeat +} + +#myItemCarousel .carousel-control-nav.left { +left: 0 +} + +#myItemCarousel .carousel-control-nav.right { +right: 0; +background: url(/images/slider_nav2.png) -51px 0 no-repeat +} + +.slider_mp_items h3 { +padding-left: 100px +} + +.slider_mp_items #myItemCarousel { +background: #fff +} + +.slider_mp_items .product_item .img,.prodview .product_item .img { +width: 140px; +height: 100px; +text-align: center; +margin: 0 15px 20px 0; +float: left +} + +.prodview .product_item .img { +border-right: 1px dotted #b8b8b8 +} + +.slider_mp_items .product_item .info,.prodview .product_item .info { +overflow: hidden; +margin: 0 0 5px; +text-align: left; +border-right: 1px dotted #b8b8b8 +} + +.prodview .product_item .info { +border-right: none +} + +#myItemCarousel .item .block-25:nth-child(4n) .info { +border-right: none +} + +#myItemCarousel .product_item .info .title,,.prodview .product_item .title { +font-size: 13px; +min-height: 45px; +padding: 5px 10px 0 0 +} + +#myItemCarousel .product_item .info .price,.prodview .product_item .info .price { +font-size: 16px; +font-weight: 700; +font-style: italic; +line-height: 20px; +color: #333; +font-family: Arial; +padding-bottom: 10px +} + +#myItemCarousel .product_item .info .price .currency,.prodview .product_item .info .price .currency { +font-weight: 400; +font-style: italic; +padding-left: 5px +} + +#myItemCarousel .product_item .info .rating li,.prodview .product_item .info .rating li { +float: left!important; +width: 10px; +height: 11px; +padding: 1px; +background-image: url(/images/sprites/icons.png); +background-repeat: no-repeat; +position: static; +border-radius: 0; +margin: 0; +border: none +} + +#myItemCarousel .product_item .info .rating li.active,.prodview .product_item .info .rating li.active { +background-position: -12px -93px +} + +.rating ul li.passive { +background: url(/images/sprites/icons_opacity.png) -28px -386px no-repeat +} + +.product_detail { +overflow: hidden +} + +.product_detail h1 { +font-family: 'roboto',sans-serif; +font-size: 21px; +line-height: 24px; +font-weight: 700; +padding: 0 15px 5px 0; +color: #333; +float: left +} + +.product_detail .product_code { +font-size: 11px; +color: #999; +padding: 0; +font-family: arial; +margin: 13px 0 10px; +white-space: nowrap; +float: left; +font-weight: 400; +line-height: 24px +} + +.product_detail .img_part { +max-width: 342px; +min-width: 327px; +width: 30%; +margin: 0 50px 30px 0; +float: left; +position: relative; +z-index: 1 +} + +.product_detail .img_part .position { +width: 100%; +position: relative; +z-index: 2; +margin-top: -50px; +top: 50px +} + +.product_detail .img_part .position.fixed { +max-width: 342px; +width: 30% +} + +.product_detail .img_part_big { +position: relative; +z-index: 1; +margin: 0 0 20px +} + +.product_detail .img_part .img_gallery li { +text-align: center; +position: relative; +z-index: 9999; +display: none; +min-height: 300px +} + +.product_detail .img_part .img_gallery li.selected { +display: block +} + +a.preview { +cursor: -webkit-zoom-in; +display: block +} + +.product_detail .img_part .img_gallery li > img { +width: auto; +max-width: 100%; +max-height: 300px; +display: block; +margin: 0 auto +} + +.product_detail .img_part .img_part_small_centered { +width: auto +} + +.product_detail .img_gallery li .zoom_container { +position: absolute; +z-index: 9999; +width: 450px; +height: 400px; +overflow: hidden; +left: 420px; +top: 0; +border: 2px solid #e1e1e1; +display: none; +border-radius: 10px; +box-shadow: 0 0 10px 20px #fff; +background: #fff +} + +.product_detail .img_gallery li .zoom_lupa { +position: absolute; +z-index: 1; +left: 0; +top: 0; +border: 1px solid #e1e1e1; +background: rgba(255,255,255,0.7); +display: none +} + +.product_detail .img_part .img_gallery li .lupa.zoom_active { +display: block +} + +.product_detail .img_part .img_gallery li .lupa { +position: absolute; +z-index: 1; +right: 0; +bottom: 0; +width: 33px; +height: 33px; +background: url(/images/sprites/arrs_carousel.png) 0 -272px no-repeat; +border-radius: 3px; +cursor: pointer; +display: none +} + +.img_part_small { +border-top: 1px solid #d8d8d8; +margin: 0 0 20px +} + +.product_detail .img_part .img_gallery_small { +max-width: 201px; +height: 75px; +overflow: hidden; +float: left; +margin-top: -13px +} + +.product_detail .img_part .img_part_small_centered .img_gallery_small { +max-width: none; +float: none; +margin-right: auto; +margin-left: auto +} + +.product_detail .img_part .img_gallery_small li { +width: 67px; +height: 67px; +padding: 8px 0 0; +margin: 0; +overflow: hidden; +float: left; +text-align: center +} + +.product_detail .img_part .img_gallery_small li img { +width: 51px; +height: 51px; +padding: 8px +} + +.product_detail .img_part .img_gallery_small li.selected { +background: url(/images/horizontal_carousel_item.png) center 0 no-repeat +} + +.detail_main_tabs { +margin: 0; +padding: 0 0 25px; +list-style: none; +background: #fff +} + +.detail_main_tabs li { +margin: 0 0 10px; +background: #e6e6e6; +position: relative; +z-index: 1; +border-radius: 4px +} + +.detail_main_tabs li.selected { +background-color: #4a4a4a; +box-shadow: 1px 1px 2px #000 inset +} + +.detail_main_tabs li .arr { +position: absolute; +z-index: 1; +width: 16px; +height: 34px; +background: url(/images/sprites/arrows.png) -23px -338px no-repeat; +top: 0; +right: -13px; +display: none +} + +.detail_main_tabs li.selected .arr { +display: block +} + +.detail_main_tabs li.selected a .text { +color: #ccc; +border-color: transparent +} + +.detail_main_tabs li.selected.comments .icon { +background-position: -19px -433px +} + +.detail_main_tabs li.selected.properties .icon { +background-position: -19px -397px +} + +.detail_main_tabs li a { +display: block; +line-height: 34px; +height: 34px; +padding: 0 10px 0 50px; +text-decoration: none; +position: relative; +z-index: 2 +} + +.detail_main_tabs li a .text { +font-size: 14px; +font-weight: 700; +color: #0156a9; +border-bottom: 1px dashed; +line-height: 14px +} + +.detail_main_tabs li .icon { +position: absolute; +z-index: 1; +left: 20px; +top: 50%; +background-image: url(/images/sprites/icons_opacity.png); +background-repeat: no-repeat; +height: 18px; +margin-top: -9px; +border: 0 +} + +.detail_main_tabs li.properties .icon { +width: 16px; +background-position: 0 -415px +} + +.detail_main_tabs li.comments .icon { +width: 18px; +background-position: 0 -433px +} + +.product_detail .img_part .floating_helper_block_wrapper { +background: #fff +} + +.product_detail .img_part .floating_helper_block { +background: #f7f7f7; +border-radius: 4px; +padding: 10px 0; +text-align: center; +line-height: 20px; +margin: 0 0 20px; +position: relative; +z-index: 1 +} + +.product_detail .img_part .floating_helper_block table { +width: 100%; +text-align: center; +padding: 0; +margin: 0; +border-collapse: collapse +} + +.product_detail .img_part .floating_helper_block .arr { +position: absolute; +z-index: 1; +width: 15px; +height: 13px; +left: 50%; +top: -13px; +margin: 0 0 0 -7px; +background: url(/images/sprites/arrows.png) 0 -56px no-repeat +} + +.product_detail .img_part .floating_helper_block .price { +font-size: 18px; +color: #666; +line-height: 48px; +font-weight: 700; +margin-left: 20px!important; +white-space: nowrap +} + +.product_detail .img_part .floating_helper_block .priceold { +text-decoration: line-through; +font-size: 14px; +color: #666; +padding-left: 30px +} + +.product_detail .floating_helper_block .wishlike_block li { +float: left; +margin: 0 15px 0 0; +position: relative; +font-size: 11px; +z-index: 1; +white-space: nowrap +} + +.product_detail .floating_helper_block .wishlike_block li a { +font-size: 11px; +text-decoration: none; +border-bottom: 1px dashed #0156a9; +color: #0156a9; +margin: 0 0 0 20px +} + +.product_detail .floating_helper_block .wishlike_block li .icon { +width: 13px; +height: 11px; +background-image: url(/images/sprites/icons_opacity.png); +background-repeat: no-repeat; +position: absolute; +z-index: 1; +left: 0; +top: 2px; +float: left +} + +.product_detail .floating_helper_block .wishlike_block li.compare .icon { +background-position: 0 -302px +} + +.product_detail .floating_helper_block .wishlike_block li.compare:hover .icon { +background-position: -20px -302px +} + +.product_detail .floating_helper_block .wishlike_block li.like .icon { +background-position: 0 -314px +} + +.floating_helper_block .wishlike_block li.like:hover .icon { +background-position: -20px -314px +} + +.product_detail .img_part .floating_helper_block .price { +margin: 0 5px; +text-align: left +} + +.modal-title .cart-icon { +float: left; +width: 25px; +height: 22px; +background: url(/images/sprites/icons.png) 0 -139px no-repeat; +margin: 0 10px 0 0 +} + +.product_detail .info { +overflow: hidden +} + +.product_detail .info_table,.product_detail .info_table table { +padding: 0; +margin: 0; +border-spacing: 0; +width: 100% +} + +.product_detail .info_table { +margin-bottom: 20px +} + +.product_detail .info_table .left_count { +height: 31px; +border-bottom: 1px solid #fff; +font-size: 12px; +text-align: center; +background-color: #f3f3f3; +border-radius: 5px 5px 0 0; +padding: 0; +margin: 0 +} + +.product_detail td.right_block { +height: 100%; +border-collapse: collapse +} + +.product_detail .info_table .left_count.available { +color: #390 +} + +.available { +color: #390 +} + +.product_detail .info_table .price_block { +background-color: #f3f3f3; +border-radius: 0 0 5px 5px; +padding: 10px 0 20px +} + +.product_detail .info_table .price_block .priceold { +text-decoration: line-through; +margin: 10px 0 +} + +.product_detail .info_table .price_block .price .main { +font-size: 28px; +line-height: 28px; +display: block +} + +.product_detail .info_table .price_block .price .currency,.product_popup_gallery .price .currency { +font-size: 12px; +font-weight: 400 +} + +.product_detail .info_table .price_block_container { +width: 200px; +margin: 0 auto; +text-align: center +} + +.product_detail .info_table .price_block .buy_button .btn { +margin: 0 0 10px; +padding-left: 0; +padding-right: 0; +width: 100%; +text-align: center +} + +.product_detail .info_table .price_block .follow_price { +margin: 0 0 12px; +font-size: 11px; +line-height: 17px +} + +.product_detail .info_table .price_block .follow_price a { +text-decoration: none; +border-bottom: 1px dashed #0156a9 +} + +.product_detail .info_table .price_block .payment_visa { +font: 14px/20px roboto,sans-serif; +color: #666; +margin: 0 0 10px +} + +.product_detail .info_table .price_block .payment_visa .visa { +display: inline-block; +width: 92px; +height: 18px; +background: url(/images/sprites/pb_wm_button.png) 0 0; +margin: 0 0 -3px; +cursor: pointer +} + +.product_detail .info_table .price_block .payment_visa .visa:hover { +background-position: 0 -18px +} + +.product_detail .info_table .price_block .payment_visa .webmoney { +display: inline-block; +width: 30px; +height: 18px; +background: url(/images/sprites/pb_wm_button.png) -92px 0; +margin: 0 0 -3px; +cursor: pointer +} + +.product_detail .info_table .price_block .payment_visa .webmoney:hover { +background-position: -92px -18px +} + +.product_detail .info_table .price_block .wishlike_block { +text-align: center; +height: 28px; +margin: 0 0 15px +} + +.product_detail .info_table .price_block .wishlike_block li,.product_detail .other_colors_block .compare,.product_detail .floating_helper_block .wishlike_block li { +display: inline-block; +float: none; +margin: 0 15px 0 0; +position: relative; +font-size: 11px; +z-index: 1; +white-space: nowrap +} + +.product_detail .info_table .price_block .wishlike_block li .icon,.product_detail .other_colors_block .compare .icon,.product_detail .floating_helper_block .wishlike_block li .icon { +width: 13px; +height: 11px; +background-image: url(/images/sprites/icons_opacity.png); +background-repeat: no-repeat; +position: absolute; +z-index: 1; +left: 0; +top: 2px; +float: left +} + +.product_detail .info_table .price_block .wishlike_block li.like .icon,.product_detail .floating_helper_block .wishlike_block li.like .icon { +background-position: 0 -314px +} + +.product_detail .info_table .price_block .wishlike_block li.like:hover .icon,.product_detail .floating_helper_block .wishlike_block li.like:hover .icon { +background-position: -20px -314px +} + +.product_detail .info_table .price_block .wishlike_block li.compare .icon,.product_detail .other_colors_block .compare .icon,.product_detail .floating_helper_block .wishlike_block li.compare .icon { +background-position: 0 -302px +} + +.product_detail .info_table .price_block .wishlike_block li.compare:hover .icon,.product_detail .other_colors_block .compare:hover .icon,.product_detail .floating_helper_block .wishlike_block li.compare:hover .icon { +background-position: -20px -302px +} + +.product_detail .info_table .price_block .wishlike_block li .compare,.product_detail .info_table .price_block .wishlike_block li .like,.product_detail .other_colors_block .compare a,.product_detail .floating_helper_block .wishlike_block li a { +text-decoration: none; +border-bottom: 1px dashed #0156a9; +color: #0156a9; +margin: 0 0 0 20px +} + +.product_detail .info .rating { +width: 100%; +background: #eee; +margin: 15px auto; +color: #666; +position: relative; +z-index: 1; +white-space: nowrap; +font-size: 12px; +text-align: center; +padding: 10px 0; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px +} + +.product_detail .info .rating ul,#compare .rating ul { +display: inline-block; +margin: 3px 5px 0 0 +} + +.product_detail .info .rating ul.available li,#compare .rating ul li { +cursor: pointer +} + +.detail_recently_looked ul li .rating ul li.active,.product_detail .info .rating li.active,.product_detail .comments_list_carousel li .comment_block .rating ul li.active,.detail_main_tabs li.comments .rating li.active,.fresh_block .comment_block .rating ul li.active,.catalog_product_list .fast_view .main_info_part .rating ul li.active,.catalog_product_list .fast_view .tabs_part .comments .rating li.active,.old_product_block .product .rating ul li.active,#compare .rating ul li.active { +background: url(/images/sprites/icons_opacity.png) -28px -375px no-repeat +} + +.product_detail .warranty_block { +border: 1px solid #e1e1e1; +border-radius: 5px; +vertical-align: middle +} + +.product_detail .info .warranty_block { +border: none +} + +.product_detail .warranty_block ul li { +margin: 0 0 15px; +position: relative; +z-index: 1; +color: #666; +padding: 0 0 0 40px +} + +.product_detail .warranty_block ul li .title { +font-size: 16px; +line-height: 18px; +font-weight: 700; +color: #333; +font-family: 'roboto',sans-serif; +text-transform: uppercase; +margin: 0 0 5px +} + +.product_detail .warranty_block ul li .descr { +line-height: 16px; +font-size: 12px; +margin: 0 0 5px +} + +.product_detail .warranty_block ul li.delivery .descr { +line-height: 20px +} + +.product_detail .warranty_block ul li .icon { +position: absolute; +z-index: 1; +left: 0; +top: 3px; +background-image: url(/images/sprites/icons.png); +background-repeat: no-repeat +} + +.product_detail .warranty_block ul li.delivery .icon { +width: 23px; +height: 14px; +background-position: 0 -232px +} + +.product_detail .warranty_block ul li.product_back .icon { +width: 20px; +height: 21px; +background-position: 0 -868px; +width: 20px; +height: 21px; +background-position: 0 -868px +} + +.product_detail .warranty_block ul li.warranty .icon { +width: 23px; +height: 26px; +background-position: 0 -890px +} + +.product_detail .warranty_block ul li .black { +color: #333 +} + +.product_detail .warranty_block ul li .bold { +font-weight: 700 +} + +.product_detail .warranty_block ul li .star_info { +color: #ff3c00 +} + +.ajax_link { +color: #0156a9; +border-bottom: 1px dashed; +cursor: pointer; +white-space: nowrap +} + +.product_detail .fast_order_form { +position: relative; +margin: 20px 0 +} + +.product_detail .fast_order_form input[type=tel] { +height: 30px; +border: 3px solid #ffa125; +width: 100%; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px +} + +.product_detail .fast_order_form input.btn { +height: 36px; +position: absolute; +top: 0; +right: -200px +} + +.product_detail .property_show_tabs,.product_detail .property_show_all { +float: left; +margin: 0 0 10px +} + +.product_detail .tabs .items li,.product_detail .comments_sort li,.product_detail .property_show_tabs li,.product_detail .property_show_all li { +float: left; +white-space: nowrap; +line-height: 34px; +font-size: 15px; +background-color: #f4f4f4; +border-radius: 3px; +margin-right: 2px; +padding: 10px 15px; +list-style-type: none +} + +.product_detail .tabs .items li a,.product_detail .comments_sort li a,.product_detail .property_show_tabs li a,.product_detail .property_show_all li a { +float: left; +padding: 0 20px; +text-decoration: none; +border: none; +background: transparent +} + +.product_detail .property_show_tabs li.active > a,.product_detail .property_show_tabs li.active > a:hover,.product_detail .property_show_tabs li.active > a:focus,.product_detail .property_show_tabs li > a,.product_detail .property_show_tabs li > a:hover,.product_detail .property_show_tabs li > a:focus { +border: none; +background: transparent +} + +.product_detail .tabs .items li a span,.product_detail .info_left_block .tabs .items li a span.text,.product_detail .comments_sort li a span,.product_detail .property_show_tabs li a span,.product_detail .property_show_all li a span { +border-bottom: 1px dashed #145597; +cursor: pointer +} + +.product_detail .tabs .items li.active,.product_detail .comments_sort li.active,.product_detail .property_show_tabs li.active { +box-shadow: 1px 1px 2px #dedede inset +} + +.product_detail .tabs .items li.active a,.product_detail .comments_sort li.active a,.product_detail .property_show_tabs li.active a { +font-weight: 700; +color: #000; +border: none!important +} + +.product_detail .tabs .items li.active a span,.product_detail .comments_sort li.active a span,.product_detail .property_show_tabs li.active a span { +border: none +} + +.product_detail .property_show_tabs,.product_detail .property_show_all { +float: left; +margin: 0 0 10px; +padding: 0; +list-style: none +} + +.product_detail .properties table { +width: 100%; +border-collapse: collapse; +border-spacing: 0; +padding: 0; +margin: 0 0 20px +} + +.product_detail .properties table td { +vertical-align: top; +border-collapse: collapse; +border-spacing: 0; +padding: 8px 15px; +margin: 0; +border: 1px solid #eaeaea; +background-color: #fff +} + +.product_detail .properties table .gray td { +background-color: #f8f8f8 +} + +.product_detail .properties table td.name { +color: #333; +border-left: none; +width: 40% +} + +.product_detail .properties .table_title i { +position: absolute; +z-index: 1; +left: 0; +top: 50%; +width: 100%; +height: 1px; +line-height: 1px; +font-size: 1px; +overflow: hidden; +background-color: #e3e3e3 +} + +.product_detail .properties .table_title { +font: 18px/24px roboto,sans-serif; +color: #2b2b2b; +position: relative; +z-index: 1; +text-align: center; +font-weight: 700 +} + +.product_detail .properties .table_title span { +background-color: #fff; +padding: 0 20px; +position: relative; +z-index: 2 +} + +.product_detail .comments .comment_add_form { +margin: 0 0 20px; +padding: 15px 20px; +background-color: #f1f1f1; +border-radius: 5px; +font-family: arial; +font-size: 14px; +line-height: 17px +} + +.product_detail .comments .inpt { +height: auto; +line-height: 18px; +padding: 4px; +border-radius: 4px; +border-top: 1px solid #d9d9d9; +border-left: 1px solid #e4e4e4; +border-right: 1px solid #e4e4e4; +border-bottom: 1px solid #e9e9e9; +background-color: #fff +} + +.product_detail .comments .comment_add_form .title { +font-family: 'roboto',sans-serif; +font-size: 16px; +color: #333; +font-weight: 700 +} + +.product_detail .comments .comment_add_form .field_name { +font-size: 13px; +line-height: 14px; +margin: 0 0 3px; +color: #333; +font-weight: 700 +} + +.product_detail .comments .comment_add_form .inpt input { +height: 40px; +font-size: 16px; +font-family: 'roboto',sans-serif; +font-weight: lighter; +padding: 8px 5px; +display: block; +-moz-box-sizing: border-box; +-webkit-box-sizing: border-box +} + +.product_detail .comments .comment_add_form textarea { +height: 76px; +padding: 5px 10px; +font-size: 16px; +font-weight: lighter; +font-family: 'roboto',sans-serif; +-moz-box-sizing: border-box; +-webkit-box-sizing: border-box; +overflow: hidden; +position: relative; +z-index: 2 +} + +.product_detail .comments .comment_add_form .comment_form_table .error_text { +display: inline-block +} + +.product_detail .comments .comment_add_form .comment_form_table .inpt { +width: 240px; +margin: 0 10px 0 0; +display: inline-block +} + +.product_detail .comments .comment_add_form .txtarea { +margin: 0 0 13px +} + +.txtarea textarea { +background: transparent; +border: 0; +width: 100%; +resize: none +} + +.product_detail .comments .comment_add_form .comment_form_table td { +background: transparent; +border: none; +padding: 5px; +margin: 0; +border-collapse: collapse; +border-spacing: 0; +vertical-align: middle +} + +.product_detail .comments .comment_add_form .submit { +text-align: center; +position: relative; +z-index: 1 +} + +.product_detail .comments .comment_add_form .submit .get_answers,.product_detail .comments .comment_add_form .submit .email_4_answers { +position: absolute; +z-index: 1; +top: 0; +left: 50%; +margin: 0 0 0 19% +} + +.product_detail .comments .comment_add_form .submit .email_4_answers { +top: 18px; +display: none +} + +.product_detail .comments .comment_add_form .email_4_answers .inpt input { +height: 28px; +padding: 4px 5px +} + +.product_detail .comments .comment_add_form .submit .get_answers { +top: 15px +} + +.product_detail .comments .comment_add_form .submit .get_answers label { +float: left; +line-height: 14px +} + +.product_detail .comments .comment_add_form .submit .get_answers input { +float: left; +line-height: 14px; +margin: 0 5px 0 0 +} + +.product_detail .comments .comment_add_form .comment_form_table ul { +margin: 0 5px 0 0; +float: left; +width: auto; +height: 16px +} + +.product_detail .comments .comment_add_form .comment_form_table ul li { +cursor: pointer +} + +.product_detail .comments ul.comments_list li .comment_block .rating span { +float: left +} + +.product_detail .comments .comment_add_form .comment_form_table ul li,.product_detail .comments ul.comments_list li .comment_block .rating ul li { +float: left; +width: 16px; +height: 15px; +margin: 0 1px; +background: url(/images/sprites/icons.png) -15px -259px no-repeat +} + +.product_detail .comments .comment_add_form .comment_form_table ul li.active,.product_detail .comments ul.comments_list li .comment_block .rating ul li.active { +background-position: 0 -259px +} + +.tovar td.left { +text-align: center +} + +.tovar .right { +padding: 10px +} + +.tovar .right .title { +font-size: 14px; +line-height: 20px; +padding: 0 0 5px; +color: #4c4c4c +} + +.count_choise .plus,.count_choise .minus,.count_choise .minus-disabled { +float: left; +width: 12px; +height: 12px; +background-image: url(/images/sprites/icons.png); +background-repeat: no-repeat; +cursor: pointer; +margin: 15px 7px 8px 0 +} + +.count_choise .minus { +background-position: -19px -161px +} + +.count_choise .minus-disabled { +background-position: -19px -187px +} + +.count_choise .plus { +background-position: -19px -174px +} + +.count_choise input { +float: left; +width: 40px; +margin: 0 6px 0 0; +font-size: 16px; +font-weight: lighter; +font-family: 'Roboto',sans-serif; +border-radius: 4px; +border: 1px solid #ccc; +height: 40px; +text-align: center; +-moz-box-sizing: border-box; +-webkit-box-sizing: border-box +} + +.count_choise .total_summ { +color: green; +font-size: 16px; +line-height: 40px; +white-space: nowrap +} + +.tovar { +width: 100% +} + +.tovar img { +max-height: 120px +} + +.tovar .back_to_shop { +float: left; +width: 160px; +margin: 10px 10px 4px 0; +background: url(/images/sprites/head_phones_icons.png) 10px -116px no-repeat; +text-align: center; +font-size: 14px; +padding-left: 10px +} + +.tovar .back_to_shop a { +color: #2b78c5; +text-decoration: none; +border-bottom: 1px dashed #2b78c5; +padding: 0 0 0 10px +} + +.tovar p.rettext { +margin: 10px 0 0; +font-size: 12px; +color: #565656; +text-align: center; +width: 180px +} + +.gray_part .title { +color: #333; +padding: 0 0 2px; +font-size: 17px +} + +.gray_part .subtitle { +color: #565656; +font-size: 13px; +line-height: 18px; +padding: 0 0 7px +} + +.gray_part .phone-example,.gray_part .phone-error { +color: #999; +padding: 0; +font-size: 13px; +font-style: italic +} + +.product_detail .comments ul.comments_list { +margin: 0 0 10px; +float: left; +width: 100% +} + +.product_detail .comments ul.comments_list .comment_block_1 .comment_add_form.answer_add_form { +display: none +} + +.product_detail .comments ul.comments_list li { +margin: 0 0 10px +} + +.product_detail .comments ul.comments_list li .author,.product_detail .comments_list_carousel li .author { +float: left; +width: 100px; +text-align: center; +padding: 0 10px +} + +.product_detail .comments ul.comments_list li .comment_block,.product_detail .comments_list_carousel li .comment_block { +overflow: hidden; +position: relative; +z-index: 1 +} + +.product_detail .comments ul.comments_list li .comment_block .date { +font-size: 12px; +color: #999; +line-height: 14px; +margin: 0 0 5px +} + +.product_detail .comments ul.comments_list li .comment_block .rating { +background: transparent; +font-size: 13px; +font-weight: 700; +margin: 0 0 15px +} + +.product_detail .comments ul.comments_list li .comment_block .rating ul { +float: left; +margin: 0 24px 0 5px; +width: auto +} + +.product_detail .comments ul.comments_list li .comment_block .comment_block_bg { +background-color: #f1f1f1; +border-radius: 5px; +margin: 0 0 0 22px +} + +.product_detail .comments ul.comments_list li .comment_block .helpful,.product_detail .comments_list_carousel li .comment_block .helpful { +float: right; +width: 90px; +padding: 10px 15px 10px 10px +} + +.product_detail .comments ul.comments_list li .comment_block .comment_content { +overflow: hidden; +padding: 15px 20px; +border-right: 1px solid #d9d9d9; +margin: 0 0 10px +} + +.product_detail .comments ul.comments_list li .comment_block .dignity,.product_detail .comments ul.comments_list li .comment_block .lack { +padding: 0 0 10px 22px; +position: relative; +z-index: 1; +line-height: 25px +} + +.product_detail .comments ul.comments_list li .comment_block .dignity .icon,.product_detail .comments ul.comments_list li .comment_block .lack .icon { +position: absolute; +z-index: 1; +width: 13px; +height: 13px; +left: 0; +top: 6px; +background: url(/images/sprites/icons.png) 0 -246px no-repeat +} + +.product_detail .comments ul.comments_list li .comment_block .lack .icon { +background-position: -13px -246px +} + +.product_detail .comments ul.comments_list li .comment_block .helpful .title,.product_detail .comments_list_carousel li .comment_block .helpful .title { +font-size: 13px; +line-height: 13px; +color: #666; +margin: 0 0 10px; +text-align: center +} + +.product_detail .comments .add_answer { +position: relative; +z-index: 1; +font-size: 15px; +font-weight: 700; +margin-left: 22px; +margin-bottom: 10px; +padding: 0 0 0 28px +} + +.product_detail .comments .add_answer a { +color: #ff3c00; +text-decoration: none; +border-bottom: 1px dashed #ff3c00 +} + +.product_detail .comments .add_answer .icon { +position: absolute; +z-index: 1; +left: 0; +top: 4px; +width: 22px; +height: 14px; +background: url(/images/sprites/icons.png) 0 -327px no-repeat +} + +.product_detail .comments ul.comments_list li .comment_block .helpful .yes,.product_detail .comments ul.comments_list li .comment_block .helpful .no,.product_detail .comments_list_carousel li .comment_block .helpful .yes,.product_detail .comments_list_carousel li .comment_block .helpful .no { +float: left; +width: 30px; +text-align: center +} + +.product_detail .comments ul.comments_list li .comment_block .helpful .yes .icon,.product_detail .comments ul.comments_list li .comment_block .helpful .no .icon,.product_detail .comments_list_carousel li .comment_block .helpful .yes .icon,.product_detail .comments_list_carousel li .comment_block .helpful .no .icon { +display: block; +width: 20px; +height: 19px; +margin: -2px auto 7px; +background: url(/images/sprites/icons.png) 0 -274px no-repeat +} + +.product_detail .comments ul.comments_list li .comment_block .helpful .no .icon,.product_detail .comments_list_carousel li .comment_block .helpful .no .icon { +background-position: 0 -293px; +margin: 2px auto 3px +} + +.product_detail .comments ul.comments_list li .comment_block .helpful .count,.product_detail .comments_list_carousel li .comment_block .helpful .count { +color: #666; +font-size: 16px +} + +.infopage { +max-width: 990px; +margin: 0 auto +} + +.modal { +text-align: center; +z-index: 99999 +} + +.modal:before { +display: inline-block; +vertical-align: middle; +content: " "; +height: 100% +} + +.modal-dialog { +display: inline-block; +text-align: left; +vertical-align: middle +} + +.modal-dialog.auth { +width: 360px +} + +.modal-dialog.wishlist { +width: 400px +} + +.modal-dialog.buy-product { +width: 460px +} + +.modal-backdrop { +background-color: #fff +} + +.modal-content { +border: 3px solid #2172c4; +-webkit-box-shadow: 5px 5px 0 rgba(0,0,0,0.2); +box-shadow: 5px 5px 0 rgba(0,0,0,0.2) +} + +.modal-header { +padding: 15px 15px 0; +border-bottom: 0 +} + +.modal-header h4 { +font-family: 'Roboto',sans-serif; +margin-top: 20px; +font-size: 26px; +font-weight: lighter +} + +.modal-header .close { +margin-top: -10px; +margin-right: -10px; +padding: 0 5px 2px; +background: #6c6964!important; +color: #d1d1d1; +-webkit-border-radius: 100%; +-moz-border-radius: 100%; +border-radius: 100% +} + +.modal-body form label { +font-weight: 300; +font-size: 18px +} + +.modal-footer { +padding: 15px; +text-align: left; +border-top: 0 +} + +.modal-body input,.modal-body textarea,.modal-body select { +background-color: #eaeaea; +border-color: #dbdbdb +} + +.modal-body input:-webkit-autofill,.modal-body textarea:-webkit-autofill,.modal-body select:-webkit-autofill { +-webkit-text-fill-color: $ textColor; +-webkit-box-shadow: 0 0 0 1000px #eaeaea inset; +background-color: #eaeaea +} + +.form-control { +height: 40px +} + +.modal-body ul.links { +display: inline-block +} + +.modal-body button,.modal-body ul.links { +display: block; +float: left +} + +.modal-body button,.modal-body a.btn.btn-gray { +padding: 10px 20px; +margin-right: 10px +} + +.modal-body a.btn.btn-gray { +border-color: #ccc; +background: #ccc; +color: #666 +} + +.modal-body ul.links a { +text-decoration: none; +color: #0c559d; +border-bottom: 1px dashed #0c559d +} + +.modal-body ul.links li { +padding: 3px 0 0 +} + +.modal-dialog.buy-product .modal-footer { +background-color: #f5f5f5; +padding: 10px 30px 20px +} + +.modal-dialog .example { +float: left; +width: 100%; +font-size: 11px; +font-style: italic; +color: #999; +padding: 2px 0 0; +margin: -10px 0 10px +} + +.o-social-button { +background: url(/images/sprites/order-social-auth-sprite.png) no-repeat scroll 0 0 transparent; +cursor: pointer; +float: left; +height: 32px; +width: 32px; +margin: 0 10px 0 0 +} + +.o-sb-vk { +background-position: 0 0 +} + +.o-sb-fb { +background-position: -64px 0 +} + +.o-sb-go { +background-position: -96px 0 +} + +.o-sb-ya { +background-position: -128px 0 +} + +.share { +width: 100%; +float: left; +border-top: 1px solid #000 +} + +.share .product_item { +float: left; +margin: 0 10px 20px 0 +} + +.share .share_title { +width: 100%; +float: left; +font-size: 40px; +color: red; +line-height: 50px; +margin: 20px 0 10px +} + +.time_left,.products_left { +float: left; +width: 50%; +text-align: center +} + +.products_left .products_title,.time_left .time_title { +font-weight: 700; +color: #333 +} + +.time_note { +width: 100%; +font-size: 40px; +font-weight: 700; +line-height: 50px; +margin-bottom: 10px +} + +.count_days,.count_hours { +float: left; +width: 40%; +text-align: center +} + +.time_left_datails { +float: left; +width: 100% +} + +.time_left_datails .days { +float: left; +width: 40%; +text-align: center +} + +.time_left_datails .hours { +float: left; +width: 40%; +text-align: center +} + +.products_num { +width: 100%; +font-size: 40px; +font-weight: 700; +line-height: 50px +} + +.products_num_datails { +text-align: center +} + +.share_readmore { +margin-top: 30px; +float: right; +color: #0156a9 +} + +#bottom { +position: fixed; +width: 100%; +max-width: 1400px; +min-width: 940px; +z-index: 1151; +bottom: 0; +display: block; +height: 0; +margin-left: -1px +} + +.bkp { +bottom: 0; +display: block; +width: 168px; +height: 33px; +background-image: url(/images/footer/nbkp2.png); +z-index: 1250; +float: left; +position: relative; +top: -33px; +left: 25% +} + +.bkp .b_cat { +display: block; +float: left; +margin-top: 10px; +margin-left: 12px; +width: 68px; +height: 16px +} + +.bkp .b_price { +display: block; +float: left; +margin-top: 10px; +margin-left: 13px; +width: 54px; +height: 16px +} + +.bkp .b_cat:hover,.bkp .bactive_cat,.bkp .b_price:hover,.bkp .bactive_price { +height: 14px; +border-bottom: solid 2px #fff +} + +.bgoogle { +bottom: 0; +display: block; +width: 113px; +height: 32px; +background-image: url(/images/footer/bgoogle.png); +z-index: 1250; +float: left; +position: relative; +top: -32px; +margin-left: 250px; +left: 25% +} + +.bvk { +bottom: 0; +display: block; +width: 113px; +height: 32px; +background-image: url(/images/footer/bvk.png); +z-index: 1250; +float: left; +position: relative; +top: -32px; +margin-left: 0; +left: 25% +} + +.bface { +bottom: 0; +display: block; +width: 113px; +height: 32px; +background-image: url(/images/footer/bfacebook.png); +z-index: 1250; +float: left; +position: relative; +top: -32px; +margin-left: 0; +left: 25% +} + +.bact { +bottom: 0; +display: block; +width: 75px; +height: 33px; +background-image: url(/images/footer/bact2.png); +z-index: 1250; +float: right; +position: relative; +top: -33px; +right: 150px +} + +.bsales { +bottom: 0; +display: block; +width: 129px; +background-image: url(/images/footer/bsalesn2.png); +z-index: 1250; +float: right; +position: relative; +top: -33px; +right: 150px; +height: 120px; +cursor: pointer +} + +.bsales #bs_box { +width: 129px; +height: 113px; +background-image: url(/images/footer/bsalesbox.png); +position: relative; +opacity: 0; +margin-top: -113px +} + +.bsales .hsale { +display: block; +width: 148px; +height: 33px; +margin-bottom: 10px +} + +.bsales a { +display: block; +width: 64px; +height: 57px; +padding-top: 18px; +float: left; +text-align: center; +font-size: 16px; +font-weight: 700; +color: #fff +} + +.form-small { +margin: 20px auto 50px; +width: 500px +} + +.form-small label { +font-size: 14px; +padding-right: 5px; +font-weight: 400 +} + +.form-small p { +font-size: 13px +} + +.vertical .carousel-inner { +height: 100% +} + +.carousel.vertical .item { +-webkit-transition: .6s ease-in-out top; +-moz-transition: .6s ease-in-out top; +-ms-transition: .6s ease-in-out top; +-o-transition: .6s ease-in-out top; +transition: .6s ease-in-out top +} + +.carousel.vertical .active { +top: 0 +} + +.carousel.vertical .next { +top: 400px +} + +.carousel.vertical .prev { +top: -400px +} + +.carousel.vertical .next.left,.carousel.vertical .prev.right { +top: 0 +} + +.carousel.vertical .active.left { +top: -400px +} + +.carousel.vertical .active.right { +top: 400px +} + +.carousel.vertical .item { +left: 0 +} + +.carousel.vertical .carousel-control { +background: none; +width: 34px; +height: 55px +} + +.carousel.vertical .carousel-control-nav.right,.carousel.vertical .carousel-control-nav.left { +position: absolute; +z-index: 1; +width: 34px; +height: 34px; +background: url(/images/sprites/arrs_carousel.png); +background-repeat: no-repeat; +cursor: pointer; +right: 0 +} + +.carousel.vertical .carousel-control-nav.left { +background-position: 0 -305px +} + +.carousel.vertical .carousel-control-nav.right { +background-position: 0 -338px +} + +.carousel.vertical .carousel-control.right { +left: auto; +right: 0; +bottom: 10px; +top: inherit +} + +.carousel.vertical .carousel-control.left { +left: auto; +right: 0; +top: -70px; +background: none +} + +.cats_table td { +text-align: center +} + +.cats_table td div { +margin: 20px 0 +} + +.cats_table .item img { +display: block; +margin: 0 auto; +text-align: center; +border: 1px solid #ccc +} + +.cats_table table { +margin: 0 auto +} + +.actions_block { +padding: 20px 50px +} + +.action_block { +width: 100%; +text-align: left; +border-top: solid 1px #000; +padding: 10px 10px 15px; +float: left +} + +.action_block:last-child { +border-bottom: solid 1px #000; +margin-bottom: 40px +} + +.action_block .l1 { +text-align: left; +font-size: 16px +} + +.action_block .l2 { +line-height: 32px; +padding-top: 10px; +padding-left: 8px; +color: #fe0000; +font-size: 32px; +font-weight: 700; +width: 300px; +float: left +} + +.action_block .limg { +width: 700px; +height: 200px; +float: left +} + +.action_block .l3 { +width: 316px; +height: 122px; +background-image: url(/images/actioned/abg.png); +float: left; +line-height: 35px +} + +.action_block .l3 .l3_1 { +float: left; +position: relative; +left: 17px; +top: 43px; +font-size: 30px; +font-weight: 700; +width: 50px; +text-align: center +} + +.action_block .l3 .l3_2 { +float: left; +position: relative; +left: 23px; +top: 43px; +font-size: 30px; +font-weight: 700; +width: 50px; +text-align: center +} + +.action_block .l3 .l3_3 { +float: left; +position: relative; +left: 84px; +top: 43px; +font-size: 30px; +font-weight: 700; +width: 100px; +text-align: center +} + +.action_block .l4 { +width: 300px; +float: left; +text-align: right; +padding-top: 5px +} + +.action_block .l4 a { +color: #0066bd; +font-size: 12px; +text-decoration: underline +} + +#personal_vertical_tabs { +float: left; +width: 100%; +background: url(/images/bg.png) repeat; +border-radius: 10px; +position: relative +} + +.tabs-left.personal { +background: #fff; +border: none; +margin: 0; +padding-top: 50px +} + +#personal_vertical_tabs .tab-content { +background: #fff; +margin-left: 40px; +border-radius: 10px; +padding: 20px 10px; +height: 520px +} + +.tabs-left.personal li a { +border: none; +margin-bottom: 20px +} + +.tabs-left.personal li.active a { +border: none +} + +.personal li a .personal_text { +margin: 0 auto; +display: block; +text-align: center +} + +.personal li a .icon { +display: block; +margin: 0 auto; +z-index: 1; +background-image: url(/images/sprites/personal_main_icons.png); +background-repeat: no-repeat; +width: 24px; +height: 34px; +background-position: -5px 0 +} + +.personal li a:hover { +background: transparent +} + +.personal li.personal_data a .icon { +width: 24px; +height: 34px; +background-position: -5px 0 +} + +.personal li.personal_data.active a .icon,.personal li.personal_data:hover a .icon { +background-position: -45px 0 +} + +.personal li.discount_card a .icon { +width: 33px; +height: 31px; +background-position: -1px -57px +} + +.personal li.active.discount_card a .icon,.personal li.discount_card:hover a .icon { +background-position: -41px -57px +} + +.personal li.delivery_address a .icon { +width: 32px; +height: 32px; +background-position: -2px -112px +} + +.personal li.delivery_address a:hover .icon,.personal li.delivery_address.active .icon { +background-position: -42px -112px +} + +.personal li.wishlist a .icon { +width: 14px; +height: 29px; +background-position: -10px -167px +} + +.personal li.wishlist a:hover .icon,.personal li.active.wishlist a .icon { +background-position: -50px -167px +} + +.personal li.subscribes a .icon { +width: 29px; +height: 29px; +background-position: -3px -270px +} + +.personal li.subscribes a:hover .icon,.personal li.active.subscribes a .icon { +background-position: -43px -270px +} + +.personal li.orders a .icon { +width: 33px; +height: 29px; +background-position: -1px -220px +} + +.personal li.orders a:hover .icon,.personal li.active.orders a .icon { +background-position: -41px -220px +} + +.lk_info_form { +width: 440px; +margin: 0 auto; +empty-cells: show +} + +.lk_info_form td { +padding: 5px +} + +.lk_info_form td.param { +color: #bababa; +font-size: 14px; +text-align: right; +width: 140px; +font-family: 'roboto',sans-serif +} + +.lk_info_form td.value { +font-size: 14px; +color: #383838; +line-height: 34px +} + +.lk_info_form td.spacer { +width: 20px +} + +.lk_info_form td.value span { +right: 15px!important; +top: 12px!important; +display: none +} + +.lk_info_form td.value .user_email { +font-weight: 700; +display: inline-block; +line-height: 57px +} + +.error_text { +color: #f60; +font-size: 13px; +font-weight: 700; +line-height: 14px; +display: none +} + +.lk_info_form td.value .inpt { +display: block; +width: 100%; +height: 34px; +line-height: 20px; +padding: 7px; +font-size: 14px; +color: #383838; +box-sizing: border-box; +box-shadow: none; +font-family: arial +} + +.lk_info_form td.value .inpt,.lk_discount .inpt { +border-color: #d2d2d2; +background: #f6f6f6; +transition: all .5s; +-moz-transition: all .5s; +-webkit-transition: all .5s +} + +.lk_info_form td.value .btn { +width: 100%; +height: 40px; +box-sizing: border-box +} + +.only_current_email { +font-size: 13px; +color: #898989; +margin: 0 0 20px +} + +.only_current_email span { +color: #000 +} + +.info_privacy { +background: #f6f6f6; +padding: 12px 12px 12px 45px; +font-size: 13px; +color: #acacac; +font-style: italic; +position: relative; +z-index: 1; +margin: 0 0 20px; +border-radius: 4px +} + +.current_data { +padding: 40px 20px 10px +} + +.current_data h4 { +color: #125698 +} + +.current_data p { +padding: 0; +margin: 0 0 10px +} + +.current_data .logout { +position: absolute; +bottom: 20px; +right: 50px; +background: #fff; +color: #999; +border: 1px solid #ccc; +padding: 10px 20px +} + +.compare-btns .btn { +color: #000; +font-weight: 300; +background: transparent; +border: none; +font-size: 14px; +-webkit-box-shadow: none; +-moz-box-shadow: none; +box-shadow: none +} + +#compare td { +padding: 5px 10px +} + +#compare th { +padding: 5px 10px +} + +#compare th:first-letter { +text-transform: uppercase +} + +#compare tr:hover { +background: rgba(255,255,255,0.8) +} + +#compare tr:first-child:hover { +background: transparent!important +} + +#compare .photo { +display: table-cell; +width: 156px; +height: 206px; +vertical-align: middle; +text-align: center; +position: relative +} + +#compare img { +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px +} + +#compare .product_compare_price { +font-size: 13px; +border-radius: 4px; +padding: 7px 7px 5px; +vertical-align: middle; +margin-right: .5em; +white-space: nowrap +} + +#compare .product_compare_price .spanUAH { +font-size: 20px +} + +.td_compare .remove_product_compare { +padding: 2px 5px; +position: absolute; +top: 5px; +right: 5px; +background: #fff; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px +} + +.collection { +padding: 0 25px +} + +.collection .catalog_product_list.view_table .catalog_item { +width: 25%; +height: 330px +} + +.collection .catalog_product_list.view_table .catalog_item .wrapper { +min-height: 318px; +height: 318px +} + +.collection .catalog_product_list.view_table .catalog_item .title { +border-top: 1px dotted #ccc; +text-align: right +} + +.collection .catalog_product_list.view_table .catalog_item .title a { +color: #0156a9; +text-decoration: underline; +font-size: 14px +} + +.diller table tr td { +padding-left: 10px +} + +.red { +color: #ff0004 +} + +h1.title { +line-height: 27px +} + +.spritecat { +background-image: url(/images/sprites/cat_spritesheet.png); +background-repeat: no-repeat; +display: block; +margin: auto +} + +.spritecat-_blank { +width: 100px; +height: 110px; +background-position: -5px -5px +} + +.spritecat-abajury_dlya_nastolnyh_lamp { +width: 100px; +height: 110px; +background-position: -115px -5px +} + +.spritecat-akcionnye { +width: 100px; +height: 110px; +background-position: -225px -5px +} + +.spritecat-bra { +width: 100px; +height: 110px; +background-position: -335px -5px +} + +.spritecat-bra_1 { +width: 100px; +height: 110px; +background-position: -445px -5px +} + +.spritecat-bra_2 { +width: 100px; +height: 110px; +background-position: -555px -5px +} + +.spritecat-bra_s_datchikom { +width: 100px; +height: 110px; +background-position: -665px -5px +} + +.spritecat-detskie { +width: 100px; +height: 110px; +background-position: -775px -5px +} + +.spritecat-detskie1 { +width: 100px; +height: 110px; +background-position: -885px -5px +} + +.spritecat-detskie2 { +width: 100px; +height: 110px; +background-position: -5px -125px +} + +.spritecat-detskie3 { +width: 100px; +height: 110px; +background-position: -115px -125px +} + +.spritecat-dlya_bra { +width: 100px; +height: 110px; +background-position: -225px -125px +} + +.spritecat-dlya_kuhon { +width: 100px; +height: 110px; +background-position: -335px -125px +} + +.spritecat-dlya_lyustr { +width: 100px; +height: 110px; +background-position: -445px -125px +} + +.spritecat-dlya_vannyh { +width: 100px; +height: 110px; +background-position: -555px -125px +} + +.spritecat-dlya_vannyh1 { +width: 100px; +height: 110px; +background-position: -665px -125px +} + +.spritecat-dlya_vannyh2 { +width: 100px; +height: 110px; +background-position: -775px -125px +} + +.spritecat-galogennye1 { +width: 100px; +height: 110px; +background-position: -885px -125px +} + +.spritecat-klassicheskie_4 { +width: 100px; +height: 110px; +background-position: -5px -245px +} + +.spritecat-klassicheskie_5 { +width: 100px; +height: 110px; +background-position: -115px -245px +} + +.spritecat-klassicheskie_6 { +width: 100px; +height: 110px; +background-position: -225px -245px +} + +.spritecat-kruglye_1 { +width: 100px; +height: 110px; +background-position: -335px -245px +} + +.spritecat-kvadratnye_1 { +width: 100px; +height: 110px; +background-position: -445px -245px +} + +.spritecat-lampochki1 { +width: 100px; +height: 110px; +background-position: -555px -245px +} + +.spritecat-lampy_energosberegayuschie { +width: 100px; +height: 110px; +background-position: -665px -245px +} + +.spritecat-lampy_nakalivaniya { +width: 100px; +height: 110px; +background-position: -775px -245px +} + +.spritecat-lampy_specialnye { +width: 100px; +height: 110px; +background-position: -885px -245px +} + +.spritecat-lyuminiscentnye1 { +width: 100px; +height: 110px; +background-position: -5px -365px +} + +.spritecat-lyustry_1 { +width: 100px; +height: 110px; +background-position: -115px -365px +} + +.spritecat-lyustry_2 { +width: 100px; +height: 110px; +background-position: -225px -365px +} + +.spritecat-na_chetyre_lampy { +width: 100px; +height: 110px; +background-position: -335px -365px +} + +.spritecat-na_dve_lampy { +width: 100px; +height: 110px; +background-position: -445px -365px +} + +.spritecat-na_odnu_lampu { +width: 100px; +height: 110px; +background-position: -555px -365px +} + +.spritecat-na_pyat_i_bolee { +width: 100px; +height: 110px; +background-position: -665px -365px +} + +.spritecat-na_tri_lampy { +width: 100px; +height: 110px; +background-position: -775px -365px +} + +.spritecat-nabornaya_sistema { +width: 100px; +height: 110px; +background-position: -885px -365px +} + +.spritecat-nakladnye_3 { +width: 100px; +height: 110px; +background-position: -5px -485px +} + +.spritecat-nastenno_potolochnye_1 { +width: 100px; +height: 110px; +background-position: -115px -485px +} + +.spritecat-nastolnye_lampy_1 { +width: 100px; +height: 110px; +background-position: -225px -485px +} + +.spritecat-ofisnye_3 { +width: 100px; +height: 110px; +background-position: -335px -485px +} + +.spritecat-perenosnye { +width: 100px; +height: 110px; +background-position: -445px -485px +} + +.spritecat-podsvetki { +width: 100px; +height: 110px; +background-position: -555px -485px +} + +.spritecat-podsvetki1 { +width: 100px; +height: 110px; +background-position: -665px -485px +} + +.spritecat-podvesnye_5 { +width: 100px; +height: 110px; +background-position: -775px -485px +} + +.spritecat-podvesnye_6 { +width: 100px; +height: 110px; +background-position: -885px -485px +} + +.spritecat-potolochnye_2 { +width: 100px; +height: 110px; +background-position: -5px -605px +} + +.spritecat-potolochnye_3 { +width: 100px; +height: 110px; +background-position: -115px -605px +} + +.spritecat-potolochnye_4 { +width: 100px; +height: 110px; +background-position: -225px -605px +} + +.spritecat-projektor { +width: 100px; +height: 110px; +background-position: -335px -605px +} + +.spritecat-rozetka { +width: 100px; +height: 110px; +background-position: -445px -605px +} + +.spritecat-s_abajurom { +width: 100px; +height: 110px; +background-position: -555px -605px +} + +.spritecat-s_abajurom_1 { +width: 100px; +height: 110px; +background-position: -665px -605px +} + +.spritecat-s_abajurom_2 { +width: 100px; +height: 110px; +background-position: -775px -605px +} + +.spritecat-soedenitelnyy_kabel { +width: 100px; +height: 110px; +background-position: -885px -605px +} + +.spritecat-sovremennye_3 { +width: 100px; +height: 110px; +background-position: -5px -725px +} + +.spritecat-sovremennye_4 { +width: 100px; +height: 110px; +background-position: -115px -725px +} + +.spritecat-sovremennye_5 { +width: 100px; +height: 110px; +background-position: -225px -725px +} + +.spritecat-stolbiki_bolshie { +width: 100px; +height: 110px; +background-position: -335px -725px +} + +.spritecat-stolbiki_malenkie { +width: 100px; +height: 110px; +background-position: -445px -725px +} + +.spritecat-stolbiki_srednie { +width: 100px; +height: 110px; +background-position: -555px -725px +} + +.spritecat-svechi { +width: 100px; +height: 110px; +background-position: -665px -725px +} + +.spritecat-svechi_1 { +width: 100px; +height: 110px; +background-position: -775px -725px +} + +.spritecat-svetilniki_dlya_kuhni { +width: 100px; +height: 110px; +background-position: -885px -725px +} + +.spritecat-svetodiodnye1 { +width: 100px; +height: 110px; +background-position: -5px -845px +} + +.spritecat-test { +width: 100px; +height: 110px; +background-position: -115px -845px +} + +.spritecat-torsheryklassicheskie { +width: 100px; +height: 110px; +background-position: -225px -845px +} + +.spritecat-torsherys_lampoy_dlya_chteniya { +width: 100px; +height: 110px; +background-position: -335px -845px +} + +.spritecat-torsherysovremennye { +width: 100px; +height: 110px; +background-position: -445px -845px +} + +.spritecat-ulichnye1 { +width: 100px; +height: 110px; +background-position: -555px -845px +} + +.spritecat-ulichnye2 { +width: 100px; +height: 110px; +background-position: -665px -845px +} + +.spritecat-ulichnye3 { +width: 100px; +height: 110px; +background-position: -775px -845px +} + +.spritecat-vreznye_1 { +width: 100px; +height: 110px; +background-position: -885px -845px +} + +.spritecat-vreznye_2 { +width: 100px; +height: 110px; +background-position: -995px -5px +} + +.spritecat-vreznye_3 { +width: 100px; +height: 110px; +background-position: -995px -125px +} + +.spritecat-vse { +width: 100px; +height: 110px; +background-position: -995px -245px +} + +.spritecat-vstraivaemye_v_grunt { +width: 100px; +height: 110px; +background-position: -995px -365px +} + +.spritebrand { +background-image: url(/images/new_img/brends/img-0.png); +background-repeat: no-repeat; +margin: auto; +display: block +} + +.spritebrand:hover { +background-image: url(/images/sprites/brand_spritesheet.png) +} + +.spritebrand-elstead { +width: 107px; +height: 54px; +background-position: -5px -5px +} + +.spritebrand-eseo { +width: 85px; +height: 54px; +background-position: -122px -5px +} + +.spritebrand-feiss { +width: 100px; +height: 54px; +background-position: -15px -69px +} + +.spritebrand-flambeau { +width: 125px; +height: 54px; +background-position: -5px -133px +} + +.spritebrand-hinkley { +width: 125px; +height: 54px; +background-position: -5px -197px +} + +.spritebrand-light { +width: 63px; +height: 54px; +background-position: -140px -69px +} + +.spritebrand-lirio { +width: 87px; +height: 54px; +background-position: -140px -133px +} + +.spritebrand-massive { +width: 71px; +height: 54px; +background-position: -140px -197px +} + +.spritebrand-philips { +width: 79px; +height: 54px; +background-position: -217px -5px +} + +.spritebrand-quozel { +width: 125px; +height: 54px; +background-position: -213px -69px +} + +.cabinet_wrap { +display: flex; +padding-bottom: 20px; +margin-top: 15px +} + +.cabinet_menu { +padding-right: 35px; +border-right: 3px solid #acc6e6; +margin-right: 35px; +margin-bottom: 35px +} + +.cabinet_menu .cab_01,.cabinet_menu .link { +margin: 3px 0 +} + +.blog-show-img.float-left { +float: left; +padding: 0 30px 30px 0 +} + +.btn.btn-cart { +height: 54px; +outline: none +} + +.header-new-img { +width: 100%; +max-width: 100% +} + +.header_tb { +height: 108px; +border-bottom: 1px solid #e4e4e4 +} + +.new_search form { +width: 100%; +float: left +} + +.new_search form .form-control { +width: 100%; +float: left; +height: 36px; +outline: none!important; +border-radius: 0!important; +border: 1px solid #a7acb0 +} + +.new_search form .form-control:focus { +box-shadow: 1px 2px 2px 0 rgba(215,215,215,0.75) inset; +transition: .1s; +-webkit-transition: .1s +} + +.new-btn-search { +position: absolute; +top: 3px; +right: 1px; +width: 34px; +height: 32px; +background: #fff url(../images/new_img/ico/ico-5.png) 50% 50% no-repeat; +z-index: 9; +border: 0!important; +outline: none!important +} + +.basket_btn { +text-decoration: none; +padding-right: 15px; +display: block; +width: 100% +} + +.price_ { +color: #0f6fc7; +font-size: 18px; +float: right; +height: 38px; +line-height: 38px; +margin-bottom: 0 +} + +.basket_btn:hover { +text-decoration: none!important +} + +.basket_btn:hover .price_ { +text-decoration: underline!important +} + +.basket_btn div,.price-basket a { +float: right; +width: 38px; +height: 38px; +background: #0f6fc7 url(../images/new_img/ico/ico-6.png) 50% 50% no-repeat; +border-radius: 100%; +position: relative; +margin-right: 15px +} + +.basket_btn div span { +position: absolute; +top: -7px; +right: -4px; +background: #e80000; +color: #fff; +min-width: 20px; +height: 20px; +padding: 0 3px; +line-height: 20px; +text-align: center; +border-radius: 100%; +font-size: 13px +} + +.tb_phones { +margin: 0; +width: 100% +} + +.tb_phones img { +vertical-align: middle; +margin-right: 10px +} + +.header_phones { +font-size: 18px; +color: #4b4b4b; +margin: 0 +} + +.header_phones span { +color: #a7acb0 +} + +.tb_phones tr { +width: 100% +} + +.tb_phones > tr > td { +width: 50%; +text-align: center; +vertical-align: middle +} + +.tb_phones tr td { +vertical-align: middle; +height: 26px +} + +.header_callback { +font-size: 13px; +color: #0f6fc7 +} + +.header_callback:hover { +color: #0f6fc7 +} + +@media (max-width: 1000px) { +#top-nav-wrapper { +position:relative +} + +header { +margin-top: 0 +} + +.bigSlidertabs.fixed { +position: relative!important; +bottom: 0 +} + +.product_detail .img_part .position.fixed { +position: relative!important; +width: 100%; +padding: 0 +} + +.up_arr { +display: none!important +} + +.product_detail .img_part .floating_helper_block .price { +margin-left: 5px!important +} + +.product_detail .img_part .floating_helper_block .priceold { +padding-left: 0 +} + +.shares { +display: none +} + +.spritebrand-flambeau { +max-width: 100px +} +} + +@media (max-width: 1199px) { +#top-nav span.phone1,#top-nav span.phone2 { +font-size:14px; +padding: 16px 10px 16px 0 +} + +#top-nav .top-menu li a { +font-size: 11px; +padding: 18px 0 18px 5px +} + +ul.parameters-list li { +padding: 0 15px +} + +ul.parameters-list li a { +font-size: 13px +} + +#header_feedback { +display: none +} + +#header_search { +margin-left: 30px +} + +#top-cart { +top: 0 +} + +#top-nav span.phone1,#top-nav span.phone2 { +font-size: 14px +} + +#top-nav .phones { +padding: 0 +} + +#top-nav .container { +position: relative +} + +#logo { +padding: 0 10px +} + +#brand_bar ul li img { +max-width: 75px +} +} + +@media only screen and (min-width: 1200px) and (max-width: 1299px) { +#logo { +float:left; +padding: 0 10px +} + +#header_search { +max-width: 360px +} + +#header_search p { +font-size: 12px; +margin: 0 0 5px +} + +.popular_search_title { +padding: 0 10px 0 50px +} + +#header_feedback form { +padding-left: 5px +} + +#header_feedback form button { +font-size: 12px; +padding: 6px 10px +} + +#header_feedback { +padding: 20px 10px 5px 20px +} +} + +@media only screen and (min-width: 1200px) and (max-width: 1399px) { +#top-nav .phones { +padding:0 20px 0 0 +} +} + +@media (min-width: 1400px) { +#top-nav .phones { +padding:0 40px 0 5px +} + +#header_search { +max-width: 465px +} + +#header_feedback form button { +font-size: 14px +} +} + +#myCallback .required label:before { +display: none +} + +@media (max-width: 1200px) { +.header_phones { +font-size:15px +} + +#brand_bar ul { +display: block; +margin: 0 +} + +#brand_bar ul li { +display: block; +float: left; +padding: 0; +margin-left: -3px +} + +.box-studio-wr p { +font-size: 11px +} + +footer .soc li { +margin-left: 14px +} + +.title-sku { +float: left; +width: 100% +} + +.comments-start { +width: 563px!important +} + +.input_bl input,.input_bl textarea,.answer-form textarea { +width: 172px!important +} + +.area_bl textarea,.answer-form textarea { +width: 413px!important +} + +.fixed-events { +transform: rotate(-90deg); +-webkit-transform: rotate(-90deg); +right: -53px +} + +.fixed-sale { +transform: rotate(90deg); +-webkit-transform: rotate(90deg); +left: -53px +} + +.fixed-sale a { +transform: rotate(-180deg); +-webkit-transform: rotate(-180deg) +} + +.btn-fixeds { +bottom: 53px +} +} + +.flip-clock-wrapper ul { +width: 40px; +height: 60px +} + +.flip-clock-wrapper ul li { +line-height: 60px +} + +.flip-clock-wrapper ul li a div div.inn { +font-size: 50px +} + +.flip-clock-dot.top { +top: 40px +} + +.flip-clock-dot.bottom { +bottom: 40px +} + +.flip-clock-divider { +height: 70px +} + +.events { +margin-top: 20px; +margin-bottom: 20px +} + +.events img { +display: block; +margin: 0 auto +} + +.news_item { +position: relative +} +.clock_style .flip-clock-label { +right: -65px!important +} + +.event_block { +position: relative; +width: 279px; +overflow: hidden; +border: 2px solid #256caf; +padding: 5px +} + +.event_block .flip-clock-wrapper { +margin-top: 15px; +margin-left: 0 +} + +.event_block .flip-clock-wrapper ul { +width: 27px; +height: 46px; +padding: 0; +margin: 1px +} + +.event_block .event_title a { +color: #256caf; +font-size: 20px; +margin-bottom: 5px +} + +.event_block .flip-clock-label { +right: -45px!important +} + +.event_block .flip-clock-wrapper ul li a div div.inn { +font-size: 40px +} + +.event_block .flip-clock-dot { +left: 2px +} + +.event_block .flip-clock-divider.hours,.event_block .flip-clock-divider.minutes,.event_block .flip-clock-divider.seconds { +width: 9px +} + +.event_block .flip-clock-dot { +width: 6px; +height: 6px +} + +.event_block .flip-clock-dot.top { +top: 30px +} + +.event_block .flip-clock-dot.bottom { +bottom: 50px +} + +.event_block .flip-clock-wrapper ul li { +line-height: 50px +} + +#HOME_SLIDER .flip-clock-wrapper { +z-index: 1000 +} + +ul.product-special li.promo div { +color: #fff +} + +.news_item { +display: block +} + +.news_item { +margin-bottom: 20px +} + +.news_item { +padding-bottom: 20px; +border-bottom: 1px solid silver; +float: left; +width: 100%; +min-height: 120px +} + +.news_item a.name { +width: 100%; +float: left; +margin-bottom: 20px; +color: #0f6fc7 +} + +.news_item a.name:hover { +color: #0f6fc7 +} + +.news_item a { +font-size: 16px +} + +.event_block_img { +position: relative; +overflow: hidden +} + +.btn-fixeds { +z-index: 1000 +} + +#brand_bar img { +-webkit-filter: grayscale(100%); +-ms-filter: grayscale(100%); +-o-filter: grayscale(100%); +-moz-filter: grayscale(100%) +} + +#brand_bar img:hover { +-webkit-filter: grayscale(0%); +-ms-filter: grayscale(0%); +-o-filter: grayscale(0%); +-moz-filter: grayscale(0%) +} + +.banner-in-list { +margin: 0!important +} + +.event_info { +position: relative; +float: left +} + +.event_info .events a { +position: absolute; +left: 0; +top: -70px; +display: inline +} + +.body_view { +max-width: 1140px; +overflow: hidden +} + +.shopsList ul { +list-style: none +} + +#link-B:before { +display: block; +content: ""; +height: 55px; +margin: -55px 0 0 +} + +.anchor:before { +display: block; +content: ""; +height: 55px; +margin: -55px 0 0 +} + +.banners_sale { +position: absolute; +top: 0; +left: 0 +} + +.banners_sale img { +margin-top: 5px!important +} + +.banners_sale img:first-child { +margin-top: 0!important +} + +@media (max-width: 1200px) { +.price-basket-wr { +margin-top:7px +} +} + +} + +.clock_style .flip-clock-label { + right: -65px!important +} + +.event_block { + position: relative; + width: 279px; + overflow: hidden; + border: 2px solid #256caf; + padding: 5px +} + +.event_block .flip-clock-wrapper { + margin-top: 15px; + margin-left: 0 +} + +.event_block .flip-clock-wrapper ul { + width: 27px; + height: 46px; + padding: 0; + margin: 1px +} + +.event_block .event_title a { + color: #256caf; + font-size: 20px; + margin-bottom: 5px +} + +.event_block .flip-clock-label { + right: -45px!important +} + +.event_block .flip-clock-wrapper ul li a div div.inn { + font-size: 40px +} + +.event_block .flip-clock-dot { + left: 2px +} + +.event_block .flip-clock-divider.hours,.event_block .flip-clock-divider.minutes,.event_block .flip-clock-divider.seconds { + width: 9px +} + +.event_block .flip-clock-dot { + width: 6px; + height: 6px +} + +.event_block .flip-clock-dot.top { + top: 30px +} + +.event_block .flip-clock-dot.bottom { + bottom: 50px +} + +.event_block .flip-clock-wrapper ul li { + line-height: 50px +} + +#HOME_SLIDER .flip-clock-wrapper { + z-index: 1000 +} + +ul.product-special li.promo div { + color: #fff +} + +.news_item { + display: block +} + +.news_item { + margin-bottom: 20px +} + +.news_item { + padding-bottom: 20px; + border-bottom: 1px solid silver; + float: left; + width: 100%; + min-height: 120px +} + +.news_item a.name { + width: 100%; + float: left; + margin-bottom: 20px; + color: #0f6fc7 +} + +.news_item a.name:hover { + color: #0f6fc7 +} + +.news_item a { + font-size: 16px +} + +.event_block_img { + position: relative; + overflow: hidden +} + +.btn-fixeds { + z-index: 1000 +} + +#brand_bar img { + -webkit-filter: grayscale(100%); + -ms-filter: grayscale(100%); + -o-filter: grayscale(100%); + -moz-filter: grayscale(100%) +} + +#brand_bar img:hover { + -webkit-filter: grayscale(0%); + -ms-filter: grayscale(0%); + -o-filter: grayscale(0%); + -moz-filter: grayscale(0%) +} + +.banner-in-list { + margin: 0!important +} + +.event_info { + position: relative; + float: left +} + +.event_info .events a { + position: absolute; + left: 0; + top: -70px; + display: inline +} + +.body_view { + max-width: 1140px; + overflow: hidden +} + +.shopsList ul { + list-style: none +} + +#link-B:before { + display: block; + content: ""; + height: 55px; + margin: -55px 0 0 +} + +.anchor:before { + display: block; + content: ""; + height: 55px; + margin: -55px 0 0 +} + +.banners_sale { + position: absolute; + top: 0; + left: 0 +} + +.banners_sale img { + margin-top: 5px!important +} + +.banners_sale img:first-child { + margin-top: 0!important +} + +@media (max-width: 1200px) { + .price-basket-wr { + margin-top:7px + } +} + + + +.irs-from, .irs-to, .irs-single{ + background: #0f6fc7; +} + +.irs-bar{ + border-top: 1px solid #0f6fc7; + border-bottom: 1px solid #0f6fc7; + background: #0f6fc7; +} + +.irs-slider.state_hover, .irs-slider:hover{ + background: #a7acb0; + } + +.irs-slider.state_hover, .irs-slider{ + background: #9fa4a8; +} + +.disabled-link{ + color: grey !important; +} + +.filter-link span{ + color: black; + font-weight: normal; +} + +.new-slider-wr .item img{ + width: 100%; + max-width: 1497px; +} + +@media (min-width: 1498px){ + .small_ar{ + display:none; + } +} +@media (max-width: 1497px){ + .arrows_slide_centered{ + display:none; + } + .small_ar#prev_slide, .small_ar#next_slide{ + top: calc(50%)!important; + } +} \ No newline at end of file diff --git a/frontend/web/css/ion.rangeSlider.css b/frontend/web/css/ion.rangeSlider.css new file mode 100644 index 0000000..68fd119 --- /dev/null +++ b/frontend/web/css/ion.rangeSlider.css @@ -0,0 +1,150 @@ +/* Ion.RangeSlider +// css version 2.0.3 +// © 2013-2014 Denis Ineshin | IonDen.com +// ===================================================================================================================*/ + +/* ===================================================================================================================== +// RangeSlider */ + +.irs { + position: relative; display: block; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + .irs-line { + position: relative; display: block; + overflow: hidden; + outline: none !important; + } + .irs-line-left, .irs-line-mid, .irs-line-right { + position: absolute; display: block; + top: 0; + } + .irs-line-left { + left: 0; width: 11%; + } + .irs-line-mid { + left: 9%; width: 82%; + } + .irs-line-right { + right: 0; width: 11%; + } + + .irs-bar { + position: absolute; display: block; + left: 0; width: 0; + } + .irs-bar-edge { + position: absolute; display: block; + top: 0; left: 0; + } + + .irs-shadow { + position: absolute; display: none; + left: 0; width: 0; + } + + .irs-slider { + position: absolute; display: block; + cursor: default; + z-index: 1; + } + .irs-slider.single { + + } + .irs-slider.from { + + } + .irs-slider.to { + + } + .irs-slider.type_last { + z-index: 2; + } + + .irs-min { + position: absolute; display: block; + left: 0; + cursor: default; + } + .irs-max { + position: absolute; display: block; + right: 0; + cursor: default; + } + + .irs-from, .irs-to, .irs-single { + position: absolute; display: block; + top: 0; left: 0; + cursor: default; + white-space: nowrap; + } + +.irs-grid { + position: absolute; display: none; + bottom: 0; left: 0; + width: 100%; height: 20px; +} +.irs-with-grid .irs-grid { + display: block; +} + .irs-grid-pol { + position: absolute; + top: 0; left: 0; + width: 1px; height: 8px; + background: #000; + } + .irs-grid-pol.small { + height: 4px; + } + .irs-grid-text { + position: absolute; + bottom: 0; left: 0; + white-space: nowrap; + text-align: center; + font-size: 9px; line-height: 9px; + padding: 0 3px; + color: #000; + } + +.irs-disable-mask { + position: absolute; display: block; + top: 0; left: -1%; + width: 102%; height: 100%; + cursor: default; + background: rgba(0,0,0,0.0); + z-index: 2; +} +.lt-ie9 .irs-disable-mask { + background: #000; + filter: alpha(opacity=0); + cursor: not-allowed; +} + +.irs-disabled { + opacity: 0.4; +} + + +.irs-hidden-input { + position: absolute !important; + display: block !important; + top: 0 !important; + left: 0 !important; + width: 0 !important; + height: 0 !important; + font-size: 0 !important; + line-height: 0 !important; + padding: 0 !important; + margin: 0 !important; + overflow: hidden; + outline: none !important; + z-index: -9999 !important; + background: none !important; + border-style: solid !important; + border-color: transparent !important; +} diff --git a/frontend/web/css/ion.rangeSlider.skinHTML5.css b/frontend/web/css/ion.rangeSlider.skinHTML5.css new file mode 100644 index 0000000..1fd2d73 --- /dev/null +++ b/frontend/web/css/ion.rangeSlider.skinHTML5.css @@ -0,0 +1,159 @@ +/* Ion.RangeSlider, Simple Skin +// css version 2.0.3 +// © Denis Ineshin, 2014 https://github.com/IonDen +// © guybowden, 2014 https://github.com/guybowden +// ===================================================================================================================*/ + +/* ===================================================================================================================== +// Skin details */ + +.irs { + height: 55px; +} +.irs-with-grid { + height: 75px; +} +.irs-line { + height: 10px; top: 33px; + background: #EEE; + /*background: linear-gradient(to bottom, #DDD -50%, #FFF 150%); !* W3C *!*/ + border: 1px solid #CCC; + border-radius: 16px; + -moz-border-radius: 16px; +} + .irs-line-left { + height: 8px; + } + .irs-line-mid { + height: 8px; + } + .irs-line-right { + height: 8px; + } + +.irs-bar { + height: 10px; top: 33px; + border-top: 1px solid #F75D50; + border-bottom: 1px solid #F75D50; + background: #F75D50; + /*background: linear-gradient(to top, rgba(66,139,202,1) 0%,rgba(127,195,232,1) 100%); !* W3C *!*/ +} + .irs-bar-edge { + height: 10px; top: 33px; + width: 14px; + border: 1px solid #F75D50; + border-right: 0; + background: #F75D50; + background: linear-gradient(to top, rgba(66,139,202,1) 0%,rgba(127,195,232,1) 100%); /* W3C */ + border-radius: 16px 0 0 16px; + -moz-border-radius: 16px 0 0 16px; + } + +.irs-shadow { + height: 2px; top: 38px; + background: #000; + opacity: 0.3; + border-radius: 5px; + -moz-border-radius: 5px; +} +.lt-ie9 .irs-shadow { + filter: alpha(opacity=30); +} + +.irs-slider { + top: 25px; + width: 27px; height: 27px; + border: 1px solid #AAA; + background: #DDD; + background: linear-gradient(to bottom, rgba(255,255,255,1) 0%,rgba(220,220,220,1) 20%,rgba(255,255,255,1) 100%); /* W3C */ + border-radius: 27px; + -moz-border-radius: 27px; + box-shadow: 1px 1px 3px rgba(0,0,0,0.3); + cursor: pointer; +} + +.irs-slider.state_hover, .irs-slider:hover { + background: #FFF; +} + +.irs-min, .irs-max { + color: #333; + font-size: 12px; line-height: 1.333; + text-shadow: none; + top: 0; + padding: 1px 5px; + background: rgba(0,0,0,0.1); + border-radius: 3px; + -moz-border-radius: 3px; +} + +.lt-ie9 .irs-min, .lt-ie9 .irs-max { + background: #ccc; +} + +.irs-from, .irs-to, .irs-single { + color: #fff; + font-size: 14px; line-height: 1.333; + text-shadow: none; + padding: 1px 5px; + background: #F75D50; + border-radius: 3px; + -moz-border-radius: 3px; +} +.lt-ie9 .irs-from, .lt-ie9 .irs-to, .lt-ie9 .irs-single { + background: #999; +} + +.irs-grid { + height: 27px; +} +.irs-grid-pol { + opacity: 0.5; + background: #F75D50; +} +.irs-grid-pol.small { + background: #999; +} + +.irs-grid-text { + bottom: 5px; + color: #99a4ac; +} + +.irs-disabled { +} + + +.irs-slider { + top: 27px; + width: 20px; height: 20px; + background: #6BA034; + border-radius: 4px; + -moz-border-radius: 27px; + box-shadow: 1px 1px 3px rgba(0,0,0,0.3); + cursor: pointer; +} +.irs-slider:after { + content: ""; + position: absolute; + width: 6px; + height: 6px; + z-index: 2; + bottom: 7px; + right: 7px; + background: white; +} +.irs-slider.state_hover, .irs-slider:hover { + background: #8ECC4E; +} + +.irs-min, .irs-max { + color: #333; + font-size: 12px; line-height: 1.333; + text-shadow: none; + top: 0; + padding: 1px 5px; + background: rgba(0,0,0,0.1); + border-radius: 3px; + -moz-border-radius: 3px; +} diff --git a/frontend/web/css/owl.carousel.css b/frontend/web/css/owl.carousel.css new file mode 100755 index 0000000..ecc8071 --- /dev/null +++ b/frontend/web/css/owl.carousel.css @@ -0,0 +1,216 @@ +/* + * Owl Carousel - Animate Plugin + */ +.owl-carousel .animated { + -webkit-animation-duration: 1000ms; + animation-duration: 1000ms; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} +.owl-carousel .owl-animated-in { + z-index: 0; +} +.owl-carousel .owl-animated-out { + z-index: 1; +} +.owl-carousel .fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} + +@-webkit-keyframes fadeOut { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} +@keyframes fadeOut { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} + +/* + * Owl Carousel - Auto Height Plugin + */ +.owl-height { + -webkit-transition: height 500ms ease-in-out; + -moz-transition: height 500ms ease-in-out; + -ms-transition: height 500ms ease-in-out; + -o-transition: height 500ms ease-in-out; + transition: height 500ms ease-in-out; +} + +/* + * Core Owl Carousel CSS File + */ +.owl-carousel { + display: none; + width: 100%; + -webkit-tap-highlight-color: transparent; + /* position relative and z-index fix webkit rendering fonts issue */ + position: relative; + z-index: 1; +} +.owl-carousel .owl-stage { + position: relative; + -ms-touch-action: pan-Y; +} +.owl-carousel .owl-stage:after { + content: "."; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0; +} +.owl-carousel .owl-stage-outer { + position: relative; + overflow: hidden; + /* fix for flashing background */ + -webkit-transform: translate3d(0px, 0px, 0px); +} +.owl-carousel .owl-controls .owl-nav .owl-prev, +.owl-carousel .owl-controls .owl-nav .owl-next, +.owl-carousel .owl-controls .owl-dot { + cursor: pointer; + cursor: hand; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.owl-carousel.owl-loaded { + display: block; +} +.owl-carousel.owl-loading { + opacity: 0; + display: block; +} +.owl-carousel.owl-hidden { + opacity: 0; +} +.owl-carousel .owl-refresh .owl-item { + display: none; +} +.owl-carousel .owl-item { + position: relative; + min-height: 1px; + float: left; + -webkit-backface-visibility: hidden; + -webkit-tap-highlight-color: transparent; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.owl-carousel .owl-item img { + display: block; + width: 100%; + -webkit-transform-style: preserve-3d; +} +.owl-carousel.owl-text-select-on .owl-item { + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.owl-carousel .owl-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -o-grab; + cursor: -ms-grab; + cursor: grab; +} +.owl-carousel.owl-rtl { + direction: rtl; +} +.owl-carousel.owl-rtl .owl-item { + float: right; +} + +/* No Js */ +.no-js .owl-carousel { + display: block; +} + +/* + * Owl Carousel - Lazy Load Plugin + */ +.owl-carousel .owl-item .owl-lazy { + opacity: 0; + -webkit-transition: opacity 400ms ease; + -moz-transition: opacity 400ms ease; + -ms-transition: opacity 400ms ease; + -o-transition: opacity 400ms ease; + transition: opacity 400ms ease; +} +.owl-carousel .owl-item img { + transform-style: preserve-3d; +} + +/* + * Owl Carousel - Video Plugin + */ +.owl-carousel .owl-video-wrapper { + position: relative; + height: 100%; + background: #000; +} +.owl-carousel .owl-video-play-icon { + position: absolute; + height: 80px; + width: 80px; + left: 50%; + top: 50%; + margin-left: -40px; + margin-top: -40px; + background: url("owl.video.play.png") no-repeat; + cursor: pointer; + z-index: 1; + -webkit-backface-visibility: hidden; + -webkit-transition: scale 100ms ease; + -moz-transition: scale 100ms ease; + -ms-transition: scale 100ms ease; + -o-transition: scale 100ms ease; + transition: scale 100ms ease; +} +.owl-carousel .owl-video-play-icon:hover { + -webkit-transition: scale(1.3, 1.3); + -moz-transition: scale(1.3, 1.3); + -ms-transition: scale(1.3, 1.3); + -o-transition: scale(1.3, 1.3); + transition: scale(1.3, 1.3); +} +.owl-carousel .owl-video-playing .owl-video-tn, +.owl-carousel .owl-video-playing .owl-video-play-icon { + display: none; +} +.owl-carousel .owl-video-tn { + opacity: 0; + height: 100%; + background-position: center center; + background-repeat: no-repeat; + -webkit-background-size: contain; + -moz-background-size: contain; + -o-background-size: contain; + background-size: contain; + -webkit-transition: opacity 400ms ease; + -moz-transition: opacity 400ms ease; + -ms-transition: opacity 400ms ease; + -o-transition: opacity 400ms ease; + transition: opacity 400ms ease; +} +.owl-carousel .owl-video-frame { + position: relative; + z-index: 1; +} diff --git a/frontend/web/favicon.ico b/frontend/web/favicon.ico new file mode 100755 index 0000000..580ed73 Binary files /dev/null and b/frontend/web/favicon.ico differ diff --git a/frontend/web/js/artbox_basket.js b/frontend/web/js/artbox_basket.js new file mode 100755 index 0000000..dff1137 --- /dev/null +++ b/frontend/web/js/artbox_basket.js @@ -0,0 +1,69 @@ +var ArtboxBasket = (function () { + function ArtboxBasket() { + $.get('/basket/main', function (data) { + this._items = data.basket; + this.updateModal(data.modal, data.cart); + }.bind(this), 'json').fail(function () { + console.error('Basket cannot be init'); + }); + } + Object.defineProperty(ArtboxBasket.prototype, "items", { + get: function () { + return this._items; + }, + enumerable: true, + configurable: true + }); + ArtboxBasket.prototype.add = function (product_variant_id, count) { + $.post('/basket/add?product_variant_id=' + product_variant_id + '&count=' + count, function (data) { + this._items = data.basket; + this.updateModal(data.modal, data.cart, true); + }.bind(this), 'json').fail(function (xhr, status, error) { + console.error(error); + }); + }; + ArtboxBasket.prototype.set = function (product_variant_id, count) { + $.post('/basket/set?product_variant_id=' + product_variant_id + '&count=' + count, function (data) { + this._items = data.basket; + this.updateModal(data.modal, data.cart); + }.bind(this), 'json').fail(function (xhr, status, error) { + console.error(error); + }); + }; + ArtboxBasket.prototype.updateModal = function (modal, cart_html, show) { + if (show === void 0) { show = false; } + var modalBox = $('#buyForm'); + modalBox.html(modal); + if (this.count < 1) { + modalBox.modal('hide'); + } + else if (show) { + modalBox.modal('show'); + } + this.updateCart(cart_html); + }; + ArtboxBasket.prototype.updateCart = function (cart_html) { + var cart = $('#top-cart-content'); + cart.html(cart_html); + }; + Object.defineProperty(ArtboxBasket.prototype, "count", { + get: function () { + return Object.keys(this._items).length; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ArtboxBasket.prototype, "sum", { + get: function () { + var sum = 0; + $.each(this._items, function (index, value) { + sum += value.price * value.count; + }); + return sum.toFixed(2); + }, + enumerable: true, + configurable: true + }); + return ArtboxBasket; +})(); +//# sourceMappingURL=artbox_basket.js.map \ No newline at end of file diff --git a/frontend/web/js/artbox_basket.js.map b/frontend/web/js/artbox_basket.js.map new file mode 100755 index 0000000..431e3cb --- /dev/null +++ b/frontend/web/js/artbox_basket.js.map @@ -0,0 +1 @@ +{"version":3,"file":"artbox_basket.js","sourceRoot":"","sources":["artbox_basket.ts"],"names":["ArtboxBasket","ArtboxBasket.constructor","ArtboxBasket.items","ArtboxBasket.add","ArtboxBasket.set","ArtboxBasket.updateModal","ArtboxBasket.updateCart","ArtboxBasket.count","ArtboxBasket.sum"],"mappings":"AAAA;IAKIA;QACIC,CAACA,CAACA,GAAGA,CAACA,cAAcA,EAAEA,UAAUA,IAAIA;YAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC,CAACA,IAAIA,CAACA,IAAIA,CAACA,EAAEA,MAAMA,CAACA,CAACA,IAAIA,CAACA;YACvB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC,CAACA,CAACA;IACPA,CAACA;IAVDD,sBAAIA,+BAAKA;aAATA;YACIE,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA;QACvBA,CAACA;;;OAAAF;IASMA,0BAAGA,GAAVA,UAAWA,kBAAkBA,EAAEA,KAAKA;QAChCG,CAACA,CAACA,IAAIA,CAACA,iCAAiCA,GAACA,kBAAkBA,GAACA,SAASA,GAACA,KAAKA,EAAEA,UAAUA,IAAIA;YACvF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC,CAACA,IAAIA,CAACA,IAAIA,CAACA,EAAEA,MAAMA,CAACA,CAACA,IAAIA,CAACA,UAAUA,GAAGA,EAAEA,MAAMA,EAAEA,KAAKA;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAACA,CAACA;IACPA,CAACA;IACMH,0BAAGA,GAAVA,UAAWA,kBAAkBA,EAAEA,KAAKA;QAChCI,CAACA,CAACA,IAAIA,CAACA,iCAAiCA,GAACA,kBAAkBA,GAACA,SAASA,GAACA,KAAKA,EAAEA,UAAUA,IAAIA;YACvF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC,CAACA,IAAIA,CAACA,IAAIA,CAACA,EAAEA,MAAMA,CAACA,CAACA,IAAIA,CAACA,UAAUA,GAAGA,EAAEA,MAAMA,EAAEA,KAAKA;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAACA,CAACA;IACPA,CAACA;IACMJ,kCAAWA,GAAlBA,UAAmBA,KAAKA,EAAEA,SAASA,EAAEA,IAAYA;QAAZK,oBAAYA,GAAZA,YAAYA;QAE7CA,IAAIA,QAAQA,GAAGA,CAACA,CAACA,UAAUA,CAACA,CAACA;QAC7BA,QAAQA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA;QACrBA,EAAEA,CAAAA,CAACA,IAAIA,CAACA,KAAKA,GAAGA,CAACA,CAACA,CAACA,CAACA;YAChBA,QAAQA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA;QAC3BA,CAACA;QAACA,IAAIA,CAACA,EAAEA,CAAAA,CAACA,IAAIA,CAACA,CAACA,CAACA;YACbA,QAAQA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA;QAC3BA,CAACA;QACDA,IAAIA,CAACA,UAAUA,CAACA,SAASA,CAACA,CAACA;IAC/BA,CAACA;IACML,iCAAUA,GAAjBA,UAAkBA,SAASA;QACvBM,IAAIA,IAAIA,GAAGA,CAACA,CAACA,mBAAmBA,CAACA,CAACA;QAClCA,IAAIA,CAACA,IAAIA,CAACA,SAASA,CAACA,CAACA;IACzBA,CAACA;IACDN,sBAAIA,+BAAKA;aAATA;YACIO,MAAMA,CAACA,MAAMA,CAACA,IAAIA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA,MAAMA,CAACA;QAC3CA,CAACA;;;OAAAP;IACDA,sBAAIA,6BAAGA;aAAPA;YACIQ,IAAIA,GAAGA,GAAGA,CAACA,CAACA;YACZA,CAACA,CAACA,IAAIA,CAACA,IAAIA,CAACA,MAAMA,EAAEA,UAASA,KAAKA,EAAEA,KAAKA;gBACrC,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACrC,CAAC,CAACA,CAACA;YACHA,MAAMA,CAACA,GAAGA,CAACA,OAAOA,CAACA,CAACA,CAACA,CAACA;QAC1BA,CAACA;;;OAAAR;IACLA,mBAACA;AAADA,CAACA,AAtDD,IAsDC"} \ No newline at end of file diff --git a/frontend/web/js/artbox_basket.ts b/frontend/web/js/artbox_basket.ts new file mode 100755 index 0000000..eb88a0d --- /dev/null +++ b/frontend/web/js/artbox_basket.ts @@ -0,0 +1,55 @@ +class ArtboxBasket { + private _items; + get items() { + return this._items; + } + constructor() { + $.get('/basket/main', function (data) { + this._items = data.basket; + this.updateModal(data.modal, data.cart); + }.bind(this), 'json').fail(function() { + console.error('Basket cannot be init'); + }); + } + public add(product_variant_id, count) { + $.post('/basket/add?product_variant_id='+product_variant_id+'&count='+count, function (data) { + this._items = data.basket; + this.updateModal(data.modal, data.cart, true); + }.bind(this), 'json').fail(function (xhr, status, error) { + console.error(error); + }); + } + public set(product_variant_id, count) { + $.post('/basket/set?product_variant_id='+product_variant_id+'&count='+count, function (data) { + this._items = data.basket; + this.updateModal(data.modal, data.cart); + }.bind(this), 'json').fail(function (xhr, status, error) { + console.error(error); + }); + } + public updateModal(modal, cart_html, show = false) + { + var modalBox = $('#buyForm'); + modalBox.html(modal); + if(this.count < 1) { + modalBox.modal('hide'); + } else if(show) { + modalBox.modal('show'); + } + this.updateCart(cart_html); + } + public updateCart(cart_html) { + var cart = $('#top-cart-content'); + cart.html(cart_html); + } + get count(): number { + return Object.keys(this._items).length; + } + get sum(): number { + var sum = 0; + $.each(this._items, function(index, value) { + sum += value.price * value.count; + }); + return sum.toFixed(2); + } +} \ No newline at end of file diff --git a/frontend/web/js/filter.js b/frontend/web/js/filter.js new file mode 100644 index 0000000..f91c837 --- /dev/null +++ b/frontend/web/js/filter.js @@ -0,0 +1,156 @@ +/** + * Created by vitaliy on 07.11.16. + */ + +function loadService(){ + + $('.properties_block').each(function(){ + var block = $(this); + $(this).find('input[type=checkbox]').each(function(){ + if(this.checked){ + block.removeClass('closed').addClass('opened'); + block.find('ul').css({"display":"block"}) + return true; + } + + }); + + }); + + $('#finput').keyup(function() { + + var empty = false; + $('#finput').each(function() { + if ($(this).val() == '') { + empty = true; + } + }); + + if (empty) { + $('.sok').attr('disabled', 'disabled').css('display','none'); + } else { + $('.sok').removeAttr('disabled').css('display','inline-block'); + } + + }); + + + + + + + $('.price_tooltip_close').on('click',function(){ + $(this).parent().hide(); + }); + + $('.pok').click(function(event) { + url = $('#purl').val(); + price_min = $('#min_price').val(); + price_max = $('#max_price').val(); + + document.location.href = url + "&pmin=" + price_min + "&pmax=" + price_max; + }); + + $('.sok').click(function(event) { + if ($('#finput').val() != "Артикул" && $('#finput').val() != "") { + + + document.location.href = "/search/main?word="+$('#finput').val(); + + + } + }); +} + +function priceRequest(link){ + var tag = $(link).parents('li'); + var filter = tag.data('filter'); + var id = $("#filters").data('category'); + $.ajax({ + url: "/ajax/count", + type: 'GET', + data: {info:filter,category:id}, + success: function(result){ + if(result=='0'){ + $(link).addClass('disabled-link'); + tag.find('input').prop( "disabled", true ); + $(link).find("span").html('('+result+')'); + } else { + $(link).removeClass('disabled-link'); + tag.find('input').prop( "disabled", false ); + $(link).find("span").html('('+result+')'); + } + + + }}); +} + + +function loadPrices(){ + $('.filter-link').each(function(){ + if(!$(this).parents('li').data('checked')){ + priceRequest(this); + } + + + }); +} + + +function priceSlider(){ + + + if($('#price_interval').length){ + + var block = $('#price_block'); + var link = block.data('url'); + var min = block.data('min'); + var max = block.data('max'); + var from = block.data('from'); + var to = block.data('to'); + + + $('#price_interval').ionRangeSlider({ + type: 'double', + min: min, + max: max, + from: from, + to: to, + grid: false, + onFinish: function(e) { + var url = link; + var from = e.from; + var to = e.to; + $.pjax({url: url.replace('{from}', from).replace('{to}', to), container: "#list-container",timeout:5000, scrollTo: false}) + } + }); + } +} + +$( document ).ready(function() { + loadService(); + loadPrices(); + priceSlider(); + + $('body').on('click', '.disabled-link', function(e){ + e.preventDefault(); + }); + + $('body').on('change', '.features-option', function(){ + var url = $(this).parents('li').find('a').attr('href'); + $.pjax({url: url, container: '#list-container',timeout:5000,scrollTo:false }) + }); + + $("#list-container").on("pjax:end", function() { + loadPrices(); + loadService(); + priceSlider(); + + }); + + + + + + +}); diff --git a/frontend/web/js/ion.rangeSlider.js b/frontend/web/js/ion.rangeSlider.js new file mode 100644 index 0000000..ea0b5ea --- /dev/null +++ b/frontend/web/js/ion.rangeSlider.js @@ -0,0 +1,2317 @@ +// Ion.RangeSlider +// version 2.1.4 Build: 355 +// © Denis Ineshin, 2016 +// https://github.com/IonDen +// +// Project page: http://ionden.com/a/plugins/ion.rangeSlider/en.html +// GitHub page: https://github.com/IonDen/ion.rangeSlider +// +// Released under MIT licence: +// http://ionden.com/a/plugins/licence-en.html +// ===================================================================================================================== + +(function (factory) { + if (typeof define === 'function' && define.amd) { + define(['jquery'], function ($) { + factory($, document, window, navigator); + }); + } else { + factory(jQuery, document, window, navigator); + } +} (function ($, document, window, navigator, undefined) { + "use strict"; + + // ================================================================================================================= + // Service + + var plugin_count = 0; + + // IE8 fix + var is_old_ie = (function () { + var n = navigator.userAgent, + r = /msie\s\d+/i, + v; + if (n.search(r) > 0) { + v = r.exec(n).toString(); + v = v.split(" ")[1]; + if (v < 9) { + $("html").addClass("lt-ie9"); + return true; + } + } + return false; + } ()); + if (!Function.prototype.bind) { + Function.prototype.bind = function bind(that) { + + var target = this; + var slice = [].slice; + + if (typeof target != "function") { + throw new TypeError(); + } + + var args = slice.call(arguments, 1), + bound = function () { + + if (this instanceof bound) { + + var F = function(){}; + F.prototype = target.prototype; + var self = new F(); + + var result = target.apply( + self, + args.concat(slice.call(arguments)) + ); + if (Object(result) === result) { + return result; + } + return self; + + } else { + + return target.apply( + that, + args.concat(slice.call(arguments)) + ); + + } + + }; + + return bound; + }; + } + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function(searchElement, fromIndex) { + var k; + if (this == null) { + throw new TypeError('"this" is null or not defined'); + } + var O = Object(this); + var len = O.length >>> 0; + if (len === 0) { + return -1; + } + var n = +fromIndex || 0; + if (Math.abs(n) === Infinity) { + n = 0; + } + if (n >= len) { + return -1; + } + k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); + while (k < len) { + if (k in O && O[k] === searchElement) { + return k; + } + k++; + } + return -1; + }; + } + + + + // ================================================================================================================= + // Template + + var base_html = + '' + + '' + + '01' + + '000' + + '' + + '' + + ''; + + var single_html = + '' + + '' + + ''; + + var double_html = + '' + + '' + + '' + + ''; + + var disable_html = + ''; + + + + // ================================================================================================================= + // Core + + /** + * Main plugin constructor + * + * @param input {Object} link to base input element + * @param options {Object} slider config + * @param plugin_count {Number} + * @constructor + */ + var IonRangeSlider = function (input, options, plugin_count) { + this.VERSION = "2.1.4"; + this.input = input; + this.plugin_count = plugin_count; + this.current_plugin = 0; + this.calc_count = 0; + this.update_tm = 0; + this.old_from = 0; + this.old_to = 0; + this.old_min_interval = null; + this.raf_id = null; + this.dragging = false; + this.force_redraw = false; + this.no_diapason = false; + this.is_key = false; + this.is_update = false; + this.is_start = true; + this.is_finish = false; + this.is_active = false; + this.is_resize = false; + this.is_click = false; + + // cache for links to all DOM elements + this.$cache = { + win: $(window), + body: $(document.body), + input: $(input), + cont: null, + rs: null, + min: null, + max: null, + from: null, + to: null, + single: null, + bar: null, + line: null, + s_single: null, + s_from: null, + s_to: null, + shad_single: null, + shad_from: null, + shad_to: null, + edge: null, + grid: null, + grid_labels: [] + }; + + // storage for measure variables + this.coords = { + // left + x_gap: 0, + x_pointer: 0, + + // width + w_rs: 0, + w_rs_old: 0, + w_handle: 0, + + // percents + p_gap: 0, + p_gap_left: 0, + p_gap_right: 0, + p_step: 0, + p_pointer: 0, + p_handle: 0, + p_single_fake: 0, + p_single_real: 0, + p_from_fake: 0, + p_from_real: 0, + p_to_fake: 0, + p_to_real: 0, + p_bar_x: 0, + p_bar_w: 0, + + // grid + grid_gap: 0, + big_num: 0, + big: [], + big_w: [], + big_p: [], + big_x: [] + }; + + // storage for labels measure variables + this.labels = { + // width + w_min: 0, + w_max: 0, + w_from: 0, + w_to: 0, + w_single: 0, + + // percents + p_min: 0, + p_max: 0, + p_from_fake: 0, + p_from_left: 0, + p_to_fake: 0, + p_to_left: 0, + p_single_fake: 0, + p_single_left: 0 + }; + + + + /** + * get and validate config + */ + var $inp = this.$cache.input, + val = $inp.prop("value"), + config, config_from_data, prop; + + // default config + config = { + type: "single", + + min: 10, + max: 100, + from: null, + to: null, + step: 1, + + min_interval: 0, + max_interval: 0, + drag_interval: false, + + values: [], + p_values: [], + + from_fixed: false, + from_min: null, + from_max: null, + from_shadow: false, + + to_fixed: false, + to_min: null, + to_max: null, + to_shadow: false, + + prettify_enabled: true, + prettify_separator: " ", + prettify: null, + + force_edges: false, + + keyboard: false, + keyboard_step: 5, + + grid: false, + grid_margin: true, + grid_num: 4, + grid_snap: false, + + hide_min_max: false, + hide_from_to: false, + + prefix: "", + postfix: "", + max_postfix: "", + decorate_both: true, + values_separator: " — ", + + input_values_separator: ";", + + disable: false, + + onStart: null, + onChange: null, + onFinish: null, + onUpdate: null + }; + + + + // config from data-attributes extends js config + config_from_data = { + type: $inp.data("type"), + + min: $inp.data("min"), + max: $inp.data("max"), + from: $inp.data("from"), + to: $inp.data("to"), + step: $inp.data("step"), + + min_interval: $inp.data("minInterval"), + max_interval: $inp.data("maxInterval"), + drag_interval: $inp.data("dragInterval"), + + values: $inp.data("values"), + + from_fixed: $inp.data("fromFixed"), + from_min: $inp.data("fromMin"), + from_max: $inp.data("fromMax"), + from_shadow: $inp.data("fromShadow"), + + to_fixed: $inp.data("toFixed"), + to_min: $inp.data("toMin"), + to_max: $inp.data("toMax"), + to_shadow: $inp.data("toShadow"), + + prettify_enabled: $inp.data("prettifyEnabled"), + prettify_separator: $inp.data("prettifySeparator"), + + force_edges: $inp.data("forceEdges"), + + keyboard: $inp.data("keyboard"), + keyboard_step: $inp.data("keyboardStep"), + + grid: $inp.data("grid"), + grid_margin: $inp.data("gridMargin"), + grid_num: $inp.data("gridNum"), + grid_snap: $inp.data("gridSnap"), + + hide_min_max: $inp.data("hideMinMax"), + hide_from_to: $inp.data("hideFromTo"), + + prefix: $inp.data("prefix"), + postfix: $inp.data("postfix"), + max_postfix: $inp.data("maxPostfix"), + decorate_both: $inp.data("decorateBoth"), + values_separator: $inp.data("valuesSeparator"), + + input_values_separator: $inp.data("inputValuesSeparator"), + + disable: $inp.data("disable") + }; + config_from_data.values = config_from_data.values && config_from_data.values.split(","); + + for (prop in config_from_data) { + if (config_from_data.hasOwnProperty(prop)) { + if (!config_from_data[prop] && config_from_data[prop] !== 0) { + delete config_from_data[prop]; + } + } + } + + + + // input value extends default config + if (val) { + val = val.split(config_from_data.input_values_separator || options.input_values_separator || ";"); + + if (val[0] && val[0] == +val[0]) { + val[0] = +val[0]; + } + if (val[1] && val[1] == +val[1]) { + val[1] = +val[1]; + } + + if (options && options.values && options.values.length) { + config.from = val[0] && options.values.indexOf(val[0]); + config.to = val[1] && options.values.indexOf(val[1]); + } else { + config.from = val[0] && +val[0]; + config.to = val[1] && +val[1]; + } + } + + + + // js config extends default config + $.extend(config, options); + + + // data config extends config + $.extend(config, config_from_data); + this.options = config; + + + + // validate config, to be sure that all data types are correct + this.validate(); + + + + // default result object, returned to callbacks + this.result = { + input: this.$cache.input, + slider: null, + + min: this.options.min, + max: this.options.max, + + from: this.options.from, + from_percent: 0, + from_value: null, + + to: this.options.to, + to_percent: 0, + to_value: null + }; + + + + this.init(); + }; + + IonRangeSlider.prototype = { + + /** + * Starts or updates the plugin instance + * + * @param is_update {boolean} + */ + init: function (is_update) { + this.no_diapason = false; + this.coords.p_step = this.convertToPercent(this.options.step, true); + + this.target = "base"; + + this.toggleInput(); + this.append(); + this.setMinMax(); + + if (is_update) { + this.force_redraw = true; + this.calc(true); + + // callbacks called + this.callOnUpdate(); + } else { + this.force_redraw = true; + this.calc(true); + + // callbacks called + this.callOnStart(); + } + + this.updateScene(); + }, + + /** + * Appends slider template to a DOM + */ + append: function () { + var container_html = ''; + this.$cache.input.before(container_html); + this.$cache.input.prop("readonly", true); + this.$cache.cont = this.$cache.input.prev(); + this.result.slider = this.$cache.cont; + + this.$cache.cont.html(base_html); + this.$cache.rs = this.$cache.cont.find(".irs"); + this.$cache.min = this.$cache.cont.find(".irs-min"); + this.$cache.max = this.$cache.cont.find(".irs-max"); + this.$cache.from = this.$cache.cont.find(".irs-from"); + this.$cache.to = this.$cache.cont.find(".irs-to"); + this.$cache.single = this.$cache.cont.find(".irs-single"); + this.$cache.bar = this.$cache.cont.find(".irs-bar"); + this.$cache.line = this.$cache.cont.find(".irs-line"); + this.$cache.grid = this.$cache.cont.find(".irs-grid"); + + if (this.options.type === "single") { + this.$cache.cont.append(single_html); + this.$cache.edge = this.$cache.cont.find(".irs-bar-edge"); + this.$cache.s_single = this.$cache.cont.find(".single"); + this.$cache.from[0].style.visibility = "hidden"; + this.$cache.to[0].style.visibility = "hidden"; + this.$cache.shad_single = this.$cache.cont.find(".shadow-single"); + } else { + this.$cache.cont.append(double_html); + this.$cache.s_from = this.$cache.cont.find(".from"); + this.$cache.s_to = this.$cache.cont.find(".to"); + this.$cache.shad_from = this.$cache.cont.find(".shadow-from"); + this.$cache.shad_to = this.$cache.cont.find(".shadow-to"); + + this.setTopHandler(); + } + + if (this.options.hide_from_to) { + this.$cache.from[0].style.display = "none"; + this.$cache.to[0].style.display = "none"; + this.$cache.single[0].style.display = "none"; + } + + this.appendGrid(); + + if (this.options.disable) { + this.appendDisableMask(); + this.$cache.input[0].disabled = true; + } else { + this.$cache.cont.removeClass("irs-disabled"); + this.$cache.input[0].disabled = false; + this.bindEvents(); + } + + if (this.options.drag_interval) { + this.$cache.bar[0].style.cursor = "ew-resize"; + } + }, + + /** + * Determine which handler has a priority + * works only for double slider type + */ + setTopHandler: function () { + var min = this.options.min, + max = this.options.max, + from = this.options.from, + to = this.options.to; + + if (from > min && to === max) { + this.$cache.s_from.addClass("type_last"); + } else if (to < max) { + this.$cache.s_to.addClass("type_last"); + } + }, + + /** + * Determine which handles was clicked last + * and which handler should have hover effect + * + * @param target {String} + */ + changeLevel: function (target) { + switch (target) { + case "single": + this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_single_fake); + break; + case "from": + this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake); + this.$cache.s_from.addClass("state_hover"); + this.$cache.s_from.addClass("type_last"); + this.$cache.s_to.removeClass("type_last"); + break; + case "to": + this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_to_fake); + this.$cache.s_to.addClass("state_hover"); + this.$cache.s_to.addClass("type_last"); + this.$cache.s_from.removeClass("type_last"); + break; + case "both": + this.coords.p_gap_left = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake); + this.coords.p_gap_right = this.toFixed(this.coords.p_to_fake - this.coords.p_pointer); + this.$cache.s_to.removeClass("type_last"); + this.$cache.s_from.removeClass("type_last"); + break; + } + }, + + /** + * Then slider is disabled + * appends extra layer with opacity + */ + appendDisableMask: function () { + this.$cache.cont.append(disable_html); + this.$cache.cont.addClass("irs-disabled"); + }, + + /** + * Remove slider instance + * and ubind all events + */ + remove: function () { + this.$cache.cont.remove(); + this.$cache.cont = null; + + this.$cache.line.off("keydown.irs_" + this.plugin_count); + + this.$cache.body.off("touchmove.irs_" + this.plugin_count); + this.$cache.body.off("mousemove.irs_" + this.plugin_count); + + this.$cache.win.off("touchend.irs_" + this.plugin_count); + this.$cache.win.off("mouseup.irs_" + this.plugin_count); + + if (is_old_ie) { + this.$cache.body.off("mouseup.irs_" + this.plugin_count); + this.$cache.body.off("mouseleave.irs_" + this.plugin_count); + } + + this.$cache.grid_labels = []; + this.coords.big = []; + this.coords.big_w = []; + this.coords.big_p = []; + this.coords.big_x = []; + + cancelAnimationFrame(this.raf_id); + }, + + /** + * bind all slider events + */ + bindEvents: function () { + if (this.no_diapason) { + return; + } + + this.$cache.body.on("touchmove.irs_" + this.plugin_count, this.pointerMove.bind(this)); + this.$cache.body.on("mousemove.irs_" + this.plugin_count, this.pointerMove.bind(this)); + + this.$cache.win.on("touchend.irs_" + this.plugin_count, this.pointerUp.bind(this)); + this.$cache.win.on("mouseup.irs_" + this.plugin_count, this.pointerUp.bind(this)); + + this.$cache.line.on("touchstart.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + this.$cache.line.on("mousedown.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + + if (this.options.drag_interval && this.options.type === "double") { + this.$cache.bar.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "both")); + this.$cache.bar.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "both")); + } else { + this.$cache.bar.on("touchstart.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + this.$cache.bar.on("mousedown.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + } + + if (this.options.type === "single") { + this.$cache.single.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "single")); + this.$cache.s_single.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "single")); + this.$cache.shad_single.on("touchstart.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + + this.$cache.single.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "single")); + this.$cache.s_single.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "single")); + this.$cache.edge.on("mousedown.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + this.$cache.shad_single.on("mousedown.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + } else { + this.$cache.single.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, null)); + this.$cache.single.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, null)); + + this.$cache.from.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "from")); + this.$cache.s_from.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "from")); + this.$cache.to.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "to")); + this.$cache.s_to.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "to")); + this.$cache.shad_from.on("touchstart.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + this.$cache.shad_to.on("touchstart.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + + this.$cache.from.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "from")); + this.$cache.s_from.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "from")); + this.$cache.to.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "to")); + this.$cache.s_to.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "to")); + this.$cache.shad_from.on("mousedown.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + this.$cache.shad_to.on("mousedown.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + } + + if (this.options.keyboard) { + this.$cache.line.on("keydown.irs_" + this.plugin_count, this.key.bind(this, "keyboard")); + } + + if (is_old_ie) { + this.$cache.body.on("mouseup.irs_" + this.plugin_count, this.pointerUp.bind(this)); + this.$cache.body.on("mouseleave.irs_" + this.plugin_count, this.pointerUp.bind(this)); + } + }, + + /** + * Mousemove or touchmove + * only for handlers + * + * @param e {Object} event object + */ + pointerMove: function (e) { + if (!this.dragging) { + return; + } + + var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX; + this.coords.x_pointer = x - this.coords.x_gap; + + this.calc(); + }, + + /** + * Mouseup or touchend + * only for handlers + * + * @param e {Object} event object + */ + pointerUp: function (e) { + if (this.current_plugin !== this.plugin_count) { + return; + } + + if (this.is_active) { + this.is_active = false; + } else { + return; + } + + this.$cache.cont.find(".state_hover").removeClass("state_hover"); + + this.force_redraw = true; + + if (is_old_ie) { + $("*").prop("unselectable", false); + } + + this.updateScene(); + this.restoreOriginalMinInterval(); + + // callbacks call + if ($.contains(this.$cache.cont[0], e.target) || this.dragging) { + this.is_finish = true; + this.callOnFinish(); + } + + this.dragging = false; + }, + + /** + * Mousedown or touchstart + * only for handlers + * + * @param target {String|null} + * @param e {Object} event object + */ + pointerDown: function (target, e) { + e.preventDefault(); + var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX; + if (e.button === 2) { + return; + } + + if (target === "both") { + this.setTempMinInterval(); + } + + if (!target) { + target = this.target; + } + + this.current_plugin = this.plugin_count; + this.target = target; + + this.is_active = true; + this.dragging = true; + + this.coords.x_gap = this.$cache.rs.offset().left; + this.coords.x_pointer = x - this.coords.x_gap; + + this.calcPointerPercent(); + this.changeLevel(target); + + if (is_old_ie) { + $("*").prop("unselectable", true); + } + + this.$cache.line.trigger("focus"); + + this.updateScene(); + }, + + /** + * Mousedown or touchstart + * for other slider elements, like diapason line + * + * @param target {String} + * @param e {Object} event object + */ + pointerClick: function (target, e) { + e.preventDefault(); + var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX; + if (e.button === 2) { + return; + } + + this.current_plugin = this.plugin_count; + this.target = target; + + this.is_click = true; + this.coords.x_gap = this.$cache.rs.offset().left; + this.coords.x_pointer = +(x - this.coords.x_gap).toFixed(); + + this.force_redraw = true; + this.calc(); + + this.$cache.line.trigger("focus"); + }, + + /** + * Keyborard controls for focused slider + * + * @param target {String} + * @param e {Object} event object + * @returns {boolean|undefined} + */ + key: function (target, e) { + if (this.current_plugin !== this.plugin_count || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) { + return; + } + + switch (e.which) { + case 83: // W + case 65: // A + case 40: // DOWN + case 37: // LEFT + e.preventDefault(); + this.moveByKey(false); + break; + + case 87: // S + case 68: // D + case 38: // UP + case 39: // RIGHT + e.preventDefault(); + this.moveByKey(true); + break; + } + + return true; + }, + + /** + * Move by key. Beta + * @todo refactor than have plenty of time + * + * @param right {boolean} direction to move + */ + moveByKey: function (right) { + var p = this.coords.p_pointer; + + if (right) { + p += this.options.keyboard_step; + } else { + p -= this.options.keyboard_step; + } + + this.coords.x_pointer = this.toFixed(this.coords.w_rs / 100 * p); + this.is_key = true; + this.calc(); + }, + + /** + * Set visibility and content + * of Min and Max labels + */ + setMinMax: function () { + if (!this.options) { + return; + } + + if (this.options.hide_min_max) { + this.$cache.min[0].style.display = "none"; + this.$cache.max[0].style.display = "none"; + return; + } + + if (this.options.values.length) { + this.$cache.min.html(this.decorate(this.options.p_values[this.options.min])); + this.$cache.max.html(this.decorate(this.options.p_values[this.options.max])); + } else { + this.$cache.min.html(this.decorate(this._prettify(this.options.min), this.options.min)); + this.$cache.max.html(this.decorate(this._prettify(this.options.max), this.options.max)); + } + + this.labels.w_min = this.$cache.min.outerWidth(false); + this.labels.w_max = this.$cache.max.outerWidth(false); + }, + + /** + * Then dragging interval, prevent interval collapsing + * using min_interval option + */ + setTempMinInterval: function () { + var interval = this.result.to - this.result.from; + + if (this.old_min_interval === null) { + this.old_min_interval = this.options.min_interval; + } + + this.options.min_interval = interval; + }, + + /** + * Restore min_interval option to original + */ + restoreOriginalMinInterval: function () { + if (this.old_min_interval !== null) { + this.options.min_interval = this.old_min_interval; + this.old_min_interval = null; + } + }, + + + + // ============================================================================================================= + // Calculations + + /** + * All calculations and measures start here + * + * @param update {boolean=} + */ + calc: function (update) { + if (!this.options) { + return; + } + + this.calc_count++; + + if (this.calc_count === 10 || update) { + this.calc_count = 0; + this.coords.w_rs = this.$cache.rs.outerWidth(false); + + this.calcHandlePercent(); + } + + if (!this.coords.w_rs) { + return; + } + + this.calcPointerPercent(); + var handle_x = this.getHandleX(); + + if (this.target === "click") { + this.coords.p_gap = this.coords.p_handle / 2; + handle_x = this.getHandleX(); + + if (this.options.drag_interval) { + this.target = "both_one"; + } else { + this.target = this.chooseHandle(handle_x); + } + } + + switch (this.target) { + case "base": + var w = (this.options.max - this.options.min) / 100, + f = (this.result.from - this.options.min) / w, + t = (this.result.to - this.options.min) / w; + + this.coords.p_single_real = this.toFixed(f); + this.coords.p_from_real = this.toFixed(f); + this.coords.p_to_real = this.toFixed(t); + + this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max); + this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max); + this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max); + + this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real); + this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real); + this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real); + + this.target = null; + + break; + + case "single": + if (this.options.from_fixed) { + break; + } + + this.coords.p_single_real = this.convertToRealPercent(handle_x); + this.coords.p_single_real = this.calcWithStep(this.coords.p_single_real); + this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max); + + this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real); + + break; + + case "from": + if (this.options.from_fixed) { + break; + } + + this.coords.p_from_real = this.convertToRealPercent(handle_x); + this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real); + if (this.coords.p_from_real > this.coords.p_to_real) { + this.coords.p_from_real = this.coords.p_to_real; + } + this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max); + this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, "from"); + this.coords.p_from_real = this.checkMaxInterval(this.coords.p_from_real, this.coords.p_to_real, "from"); + + this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real); + + break; + + case "to": + if (this.options.to_fixed) { + break; + } + + this.coords.p_to_real = this.convertToRealPercent(handle_x); + this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real); + if (this.coords.p_to_real < this.coords.p_from_real) { + this.coords.p_to_real = this.coords.p_from_real; + } + this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max); + this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, "to"); + this.coords.p_to_real = this.checkMaxInterval(this.coords.p_to_real, this.coords.p_from_real, "to"); + + this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real); + + break; + + case "both": + if (this.options.from_fixed || this.options.to_fixed) { + break; + } + + handle_x = this.toFixed(handle_x + (this.coords.p_handle * 0.1)); + + this.coords.p_from_real = this.convertToRealPercent(handle_x) - this.coords.p_gap_left; + this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real); + this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max); + this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, "from"); + this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real); + + this.coords.p_to_real = this.convertToRealPercent(handle_x) + this.coords.p_gap_right; + this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real); + this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max); + this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, "to"); + this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real); + + break; + + case "both_one": + if (this.options.from_fixed || this.options.to_fixed) { + break; + } + + var real_x = this.convertToRealPercent(handle_x), + from = this.result.from_percent, + to = this.result.to_percent, + full = to - from, + half = full / 2, + new_from = real_x - half, + new_to = real_x + half; + + if (new_from < 0) { + new_from = 0; + new_to = new_from + full; + } + + if (new_to > 100) { + new_to = 100; + new_from = new_to - full; + } + + this.coords.p_from_real = this.calcWithStep(new_from); + this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max); + this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real); + + this.coords.p_to_real = this.calcWithStep(new_to); + this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max); + this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real); + + break; + } + + if (this.options.type === "single") { + this.coords.p_bar_x = (this.coords.p_handle / 2); + this.coords.p_bar_w = this.coords.p_single_fake; + + this.result.from_percent = this.coords.p_single_real; + this.result.from = this.convertToValue(this.coords.p_single_real); + + if (this.options.values.length) { + this.result.from_value = this.options.values[this.result.from]; + } + } else { + this.coords.p_bar_x = this.toFixed(this.coords.p_from_fake + (this.coords.p_handle / 2)); + this.coords.p_bar_w = this.toFixed(this.coords.p_to_fake - this.coords.p_from_fake); + + this.result.from_percent = this.coords.p_from_real; + this.result.from = this.convertToValue(this.coords.p_from_real); + this.result.to_percent = this.coords.p_to_real; + this.result.to = this.convertToValue(this.coords.p_to_real); + + if (this.options.values.length) { + this.result.from_value = this.options.values[this.result.from]; + this.result.to_value = this.options.values[this.result.to]; + } + } + + this.calcMinMax(); + this.calcLabels(); + }, + + + /** + * calculates pointer X in percent + */ + calcPointerPercent: function () { + if (!this.coords.w_rs) { + this.coords.p_pointer = 0; + return; + } + + if (this.coords.x_pointer < 0 || isNaN(this.coords.x_pointer) ) { + this.coords.x_pointer = 0; + } else if (this.coords.x_pointer > this.coords.w_rs) { + this.coords.x_pointer = this.coords.w_rs; + } + + this.coords.p_pointer = this.toFixed(this.coords.x_pointer / this.coords.w_rs * 100); + }, + + convertToRealPercent: function (fake) { + var full = 100 - this.coords.p_handle; + return fake / full * 100; + }, + + convertToFakePercent: function (real) { + var full = 100 - this.coords.p_handle; + return real / 100 * full; + }, + + getHandleX: function () { + var max = 100 - this.coords.p_handle, + x = this.toFixed(this.coords.p_pointer - this.coords.p_gap); + + if (x < 0) { + x = 0; + } else if (x > max) { + x = max; + } + + return x; + }, + + calcHandlePercent: function () { + if (this.options.type === "single") { + this.coords.w_handle = this.$cache.s_single.outerWidth(false); + } else { + this.coords.w_handle = this.$cache.s_from.outerWidth(false); + } + + this.coords.p_handle = this.toFixed(this.coords.w_handle / this.coords.w_rs * 100); + }, + + /** + * Find closest handle to pointer click + * + * @param real_x {Number} + * @returns {String} + */ + chooseHandle: function (real_x) { + if (this.options.type === "single") { + return "single"; + } else { + var m_point = this.coords.p_from_real + ((this.coords.p_to_real - this.coords.p_from_real) / 2); + if (real_x >= m_point) { + return this.options.to_fixed ? "from" : "to"; + } else { + return this.options.from_fixed ? "to" : "from"; + } + } + }, + + /** + * Measure Min and Max labels width in percent + */ + calcMinMax: function () { + if (!this.coords.w_rs) { + return; + } + + this.labels.p_min = this.labels.w_min / this.coords.w_rs * 100; + this.labels.p_max = this.labels.w_max / this.coords.w_rs * 100; + }, + + /** + * Measure labels width and X in percent + */ + calcLabels: function () { + if (!this.coords.w_rs || this.options.hide_from_to) { + return; + } + + if (this.options.type === "single") { + + this.labels.w_single = this.$cache.single.outerWidth(false); + this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100; + this.labels.p_single_left = this.coords.p_single_fake + (this.coords.p_handle / 2) - (this.labels.p_single_fake / 2); + this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake); + + } else { + + this.labels.w_from = this.$cache.from.outerWidth(false); + this.labels.p_from_fake = this.labels.w_from / this.coords.w_rs * 100; + this.labels.p_from_left = this.coords.p_from_fake + (this.coords.p_handle / 2) - (this.labels.p_from_fake / 2); + this.labels.p_from_left = this.toFixed(this.labels.p_from_left); + this.labels.p_from_left = this.checkEdges(this.labels.p_from_left, this.labels.p_from_fake); + + this.labels.w_to = this.$cache.to.outerWidth(false); + this.labels.p_to_fake = this.labels.w_to / this.coords.w_rs * 100; + this.labels.p_to_left = this.coords.p_to_fake + (this.coords.p_handle / 2) - (this.labels.p_to_fake / 2); + this.labels.p_to_left = this.toFixed(this.labels.p_to_left); + this.labels.p_to_left = this.checkEdges(this.labels.p_to_left, this.labels.p_to_fake); + + this.labels.w_single = this.$cache.single.outerWidth(false); + this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100; + this.labels.p_single_left = ((this.labels.p_from_left + this.labels.p_to_left + this.labels.p_to_fake) / 2) - (this.labels.p_single_fake / 2); + this.labels.p_single_left = this.toFixed(this.labels.p_single_left); + this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake); + + } + }, + + + + // ============================================================================================================= + // Drawings + + /** + * Main function called in request animation frame + * to update everything + */ + updateScene: function () { + if (this.raf_id) { + cancelAnimationFrame(this.raf_id); + this.raf_id = null; + } + + clearTimeout(this.update_tm); + this.update_tm = null; + + if (!this.options) { + return; + } + + this.drawHandles(); + + if (this.is_active) { + this.raf_id = requestAnimationFrame(this.updateScene.bind(this)); + } else { + this.update_tm = setTimeout(this.updateScene.bind(this), 300); + } + }, + + /** + * Draw handles + */ + drawHandles: function () { + this.coords.w_rs = this.$cache.rs.outerWidth(false); + + if (!this.coords.w_rs) { + return; + } + + if (this.coords.w_rs !== this.coords.w_rs_old) { + this.target = "base"; + this.is_resize = true; + } + + if (this.coords.w_rs !== this.coords.w_rs_old || this.force_redraw) { + this.setMinMax(); + this.calc(true); + this.drawLabels(); + if (this.options.grid) { + this.calcGridMargin(); + this.calcGridLabels(); + } + this.force_redraw = true; + this.coords.w_rs_old = this.coords.w_rs; + this.drawShadow(); + } + + if (!this.coords.w_rs) { + return; + } + + if (!this.dragging && !this.force_redraw && !this.is_key) { + return; + } + + if (this.old_from !== this.result.from || this.old_to !== this.result.to || this.force_redraw || this.is_key) { + + this.drawLabels(); + + this.$cache.bar[0].style.left = this.coords.p_bar_x + "%"; + this.$cache.bar[0].style.width = this.coords.p_bar_w + "%"; + + if (this.options.type === "single") { + this.$cache.s_single[0].style.left = this.coords.p_single_fake + "%"; + + this.$cache.single[0].style.left = this.labels.p_single_left + "%"; + + if (this.options.values.length) { + this.$cache.input.prop("value", this.result.from_value); + } else { + this.$cache.input.prop("value", this.result.from); + } + this.$cache.input.data("from", this.result.from); + } else { + this.$cache.s_from[0].style.left = this.coords.p_from_fake + "%"; + this.$cache.s_to[0].style.left = this.coords.p_to_fake + "%"; + + if (this.old_from !== this.result.from || this.force_redraw) { + this.$cache.from[0].style.left = this.labels.p_from_left + "%"; + } + if (this.old_to !== this.result.to || this.force_redraw) { + this.$cache.to[0].style.left = this.labels.p_to_left + "%"; + } + + this.$cache.single[0].style.left = this.labels.p_single_left + "%"; + + if (this.options.values.length) { + this.$cache.input.prop("value", this.result.from_value + this.options.input_values_separator + this.result.to_value); + } else { + this.$cache.input.prop("value", this.result.from + this.options.input_values_separator + this.result.to); + } + this.$cache.input.data("from", this.result.from); + this.$cache.input.data("to", this.result.to); + } + + if ((this.old_from !== this.result.from || this.old_to !== this.result.to) && !this.is_start) { + this.$cache.input.trigger("change"); + } + + this.old_from = this.result.from; + this.old_to = this.result.to; + + // callbacks call + if (!this.is_resize && !this.is_update && !this.is_start && !this.is_finish) { + this.callOnChange(); + } + if (this.is_key || this.is_click) { + this.is_key = false; + this.is_click = false; + this.callOnFinish(); + } + + this.is_update = false; + this.is_resize = false; + this.is_finish = false; + } + + this.is_start = false; + this.is_key = false; + this.is_click = false; + this.force_redraw = false; + }, + + /** + * Draw labels + * measure labels collisions + * collapse close labels + */ + drawLabels: function () { + if (!this.options) { + return; + } + + var values_num = this.options.values.length, + p_values = this.options.p_values, + text_single, + text_from, + text_to; + + if (this.options.hide_from_to) { + return; + } + + if (this.options.type === "single") { + + if (values_num) { + text_single = this.decorate(p_values[this.result.from]); + this.$cache.single.html(text_single); + } else { + text_single = this.decorate(this._prettify(this.result.from), this.result.from); + this.$cache.single.html(text_single); + } + + this.calcLabels(); + + if (this.labels.p_single_left < this.labels.p_min + 1) { + this.$cache.min[0].style.visibility = "hidden"; + } else { + this.$cache.min[0].style.visibility = "visible"; + } + + if (this.labels.p_single_left + this.labels.p_single_fake > 100 - this.labels.p_max - 1) { + this.$cache.max[0].style.visibility = "hidden"; + } else { + this.$cache.max[0].style.visibility = "visible"; + } + + } else { + + if (values_num) { + + if (this.options.decorate_both) { + text_single = this.decorate(p_values[this.result.from]); + text_single += this.options.values_separator; + text_single += this.decorate(p_values[this.result.to]); + } else { + text_single = this.decorate(p_values[this.result.from] + this.options.values_separator + p_values[this.result.to]); + } + text_from = this.decorate(p_values[this.result.from]); + text_to = this.decorate(p_values[this.result.to]); + + this.$cache.single.html(text_single); + this.$cache.from.html(text_from); + this.$cache.to.html(text_to); + + } else { + + if (this.options.decorate_both) { + text_single = this.decorate(this._prettify(this.result.from), this.result.from); + text_single += this.options.values_separator; + text_single += this.decorate(this._prettify(this.result.to), this.result.to); + } else { + text_single = this.decorate(this._prettify(this.result.from) + this.options.values_separator + this._prettify(this.result.to), this.result.to); + } + text_from = this.decorate(this._prettify(this.result.from), this.result.from); + text_to = this.decorate(this._prettify(this.result.to), this.result.to); + + this.$cache.single.html(text_single); + this.$cache.from.html(text_from); + this.$cache.to.html(text_to); + + } + + this.calcLabels(); + + var min = Math.min(this.labels.p_single_left, this.labels.p_from_left), + single_left = this.labels.p_single_left + this.labels.p_single_fake, + to_left = this.labels.p_to_left + this.labels.p_to_fake, + max = Math.max(single_left, to_left); + + if (this.labels.p_from_left + this.labels.p_from_fake >= this.labels.p_to_left) { + this.$cache.from[0].style.visibility = "hidden"; + this.$cache.to[0].style.visibility = "hidden"; + this.$cache.single[0].style.visibility = "visible"; + + if (this.result.from === this.result.to) { + if (this.target === "from") { + this.$cache.from[0].style.visibility = "visible"; + } else if (this.target === "to") { + this.$cache.to[0].style.visibility = "visible"; + } else if (!this.target) { + this.$cache.from[0].style.visibility = "visible"; + } + this.$cache.single[0].style.visibility = "hidden"; + max = to_left; + } else { + this.$cache.from[0].style.visibility = "hidden"; + this.$cache.to[0].style.visibility = "hidden"; + this.$cache.single[0].style.visibility = "visible"; + max = Math.max(single_left, to_left); + } + } else { + this.$cache.from[0].style.visibility = "visible"; + this.$cache.to[0].style.visibility = "visible"; + this.$cache.single[0].style.visibility = "hidden"; + } + + if (min < this.labels.p_min + 1) { + this.$cache.min[0].style.visibility = "hidden"; + } else { + this.$cache.min[0].style.visibility = "visible"; + } + + if (max > 100 - this.labels.p_max - 1) { + this.$cache.max[0].style.visibility = "hidden"; + } else { + this.$cache.max[0].style.visibility = "visible"; + } + + } + }, + + /** + * Draw shadow intervals + */ + drawShadow: function () { + var o = this.options, + c = this.$cache, + + is_from_min = typeof o.from_min === "number" && !isNaN(o.from_min), + is_from_max = typeof o.from_max === "number" && !isNaN(o.from_max), + is_to_min = typeof o.to_min === "number" && !isNaN(o.to_min), + is_to_max = typeof o.to_max === "number" && !isNaN(o.to_max), + + from_min, + from_max, + to_min, + to_max; + + if (o.type === "single") { + if (o.from_shadow && (is_from_min || is_from_max)) { + from_min = this.convertToPercent(is_from_min ? o.from_min : o.min); + from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min; + from_min = this.toFixed(from_min - (this.coords.p_handle / 100 * from_min)); + from_max = this.toFixed(from_max - (this.coords.p_handle / 100 * from_max)); + from_min = from_min + (this.coords.p_handle / 2); + + c.shad_single[0].style.display = "block"; + c.shad_single[0].style.left = from_min + "%"; + c.shad_single[0].style.width = from_max + "%"; + } else { + c.shad_single[0].style.display = "none"; + } + } else { + if (o.from_shadow && (is_from_min || is_from_max)) { + from_min = this.convertToPercent(is_from_min ? o.from_min : o.min); + from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min; + from_min = this.toFixed(from_min - (this.coords.p_handle / 100 * from_min)); + from_max = this.toFixed(from_max - (this.coords.p_handle / 100 * from_max)); + from_min = from_min + (this.coords.p_handle / 2); + + c.shad_from[0].style.display = "block"; + c.shad_from[0].style.left = from_min + "%"; + c.shad_from[0].style.width = from_max + "%"; + } else { + c.shad_from[0].style.display = "none"; + } + + if (o.to_shadow && (is_to_min || is_to_max)) { + to_min = this.convertToPercent(is_to_min ? o.to_min : o.min); + to_max = this.convertToPercent(is_to_max ? o.to_max : o.max) - to_min; + to_min = this.toFixed(to_min - (this.coords.p_handle / 100 * to_min)); + to_max = this.toFixed(to_max - (this.coords.p_handle / 100 * to_max)); + to_min = to_min + (this.coords.p_handle / 2); + + c.shad_to[0].style.display = "block"; + c.shad_to[0].style.left = to_min + "%"; + c.shad_to[0].style.width = to_max + "%"; + } else { + c.shad_to[0].style.display = "none"; + } + } + }, + + + + // ============================================================================================================= + // Callbacks + + callOnStart: function () { + if (this.options.onStart && typeof this.options.onStart === "function") { + this.options.onStart(this.result); + } + }, + callOnChange: function () { + if (this.options.onChange && typeof this.options.onChange === "function") { + this.options.onChange(this.result); + } + }, + callOnFinish: function () { + if (this.options.onFinish && typeof this.options.onFinish === "function") { + this.options.onFinish(this.result); + } + }, + callOnUpdate: function () { + if (this.options.onUpdate && typeof this.options.onUpdate === "function") { + this.options.onUpdate(this.result); + } + }, + + + + // ============================================================================================================= + // Service methods + + toggleInput: function () { + this.$cache.input.toggleClass("irs-hidden-input"); + }, + + /** + * Convert real value to percent + * + * @param value {Number} X in real + * @param no_min {boolean=} don't use min value + * @returns {Number} X in percent + */ + convertToPercent: function (value, no_min) { + var diapason = this.options.max - this.options.min, + one_percent = diapason / 100, + val, percent; + + if (!diapason) { + this.no_diapason = true; + return 0; + } + + if (no_min) { + val = value; + } else { + val = value - this.options.min; + } + + percent = val / one_percent; + + return this.toFixed(percent); + }, + + /** + * Convert percent to real values + * + * @param percent {Number} X in percent + * @returns {Number} X in real + */ + convertToValue: function (percent) { + var min = this.options.min, + max = this.options.max, + min_decimals = min.toString().split(".")[1], + max_decimals = max.toString().split(".")[1], + min_length, max_length, + avg_decimals = 0, + abs = 0; + + if (percent === 0) { + return this.options.min; + } + if (percent === 100) { + return this.options.max; + } + + + if (min_decimals) { + min_length = min_decimals.length; + avg_decimals = min_length; + } + if (max_decimals) { + max_length = max_decimals.length; + avg_decimals = max_length; + } + if (min_length && max_length) { + avg_decimals = (min_length >= max_length) ? min_length : max_length; + } + + if (min < 0) { + abs = Math.abs(min); + min = +(min + abs).toFixed(avg_decimals); + max = +(max + abs).toFixed(avg_decimals); + } + + var number = ((max - min) / 100 * percent) + min, + string = this.options.step.toString().split(".")[1], + result; + + if (string) { + number = +number.toFixed(string.length); + } else { + number = number / this.options.step; + number = number * this.options.step; + + number = +number.toFixed(0); + } + + if (abs) { + number -= abs; + } + + if (string) { + result = +number.toFixed(string.length); + } else { + result = this.toFixed(number); + } + + if (result < this.options.min) { + result = this.options.min; + } else if (result > this.options.max) { + result = this.options.max; + } + + return result; + }, + + /** + * Round percent value with step + * + * @param percent {Number} + * @returns percent {Number} rounded + */ + calcWithStep: function (percent) { + var rounded = Math.round(percent / this.coords.p_step) * this.coords.p_step; + + if (rounded > 100) { + rounded = 100; + } + if (percent === 100) { + rounded = 100; + } + + return this.toFixed(rounded); + }, + + checkMinInterval: function (p_current, p_next, type) { + var o = this.options, + current, + next; + + if (!o.min_interval) { + return p_current; + } + + current = this.convertToValue(p_current); + next = this.convertToValue(p_next); + + if (type === "from") { + + if (next - current < o.min_interval) { + current = next - o.min_interval; + } + + } else { + + if (current - next < o.min_interval) { + current = next + o.min_interval; + } + + } + + return this.convertToPercent(current); + }, + + checkMaxInterval: function (p_current, p_next, type) { + var o = this.options, + current, + next; + + if (!o.max_interval) { + return p_current; + } + + current = this.convertToValue(p_current); + next = this.convertToValue(p_next); + + if (type === "from") { + + if (next - current > o.max_interval) { + current = next - o.max_interval; + } + + } else { + + if (current - next > o.max_interval) { + current = next + o.max_interval; + } + + } + + return this.convertToPercent(current); + }, + + checkDiapason: function (p_num, min, max) { + var num = this.convertToValue(p_num), + o = this.options; + + if (typeof min !== "number") { + min = o.min; + } + + if (typeof max !== "number") { + max = o.max; + } + + if (num < min) { + num = min; + } + + if (num > max) { + num = max; + } + + return this.convertToPercent(num); + }, + + toFixed: function (num) { + num = num.toFixed(9); + return +num; + }, + + _prettify: function (num) { + if (!this.options.prettify_enabled) { + return num; + } + + if (this.options.prettify && typeof this.options.prettify === "function") { + return this.options.prettify(num); + } else { + return this.prettify(num); + } + }, + + prettify: function (num) { + var n = num.toString(); + return n.replace(/(\d{1,3}(?=(?:\d\d\d)+(?!\d)))/g, "$1" + this.options.prettify_separator); + }, + + checkEdges: function (left, width) { + if (!this.options.force_edges) { + return this.toFixed(left); + } + + if (left < 0) { + left = 0; + } else if (left > 100 - width) { + left = 100 - width; + } + + return this.toFixed(left); + }, + + validate: function () { + var o = this.options, + r = this.result, + v = o.values, + vl = v.length, + value, + i; + + if (typeof o.min === "string") o.min = +o.min; + if (typeof o.max === "string") o.max = +o.max; + if (typeof o.from === "string") o.from = +o.from; + if (typeof o.to === "string") o.to = +o.to; + if (typeof o.step === "string") o.step = +o.step; + + if (typeof o.from_min === "string") o.from_min = +o.from_min; + if (typeof o.from_max === "string") o.from_max = +o.from_max; + if (typeof o.to_min === "string") o.to_min = +o.to_min; + if (typeof o.to_max === "string") o.to_max = +o.to_max; + + if (typeof o.keyboard_step === "string") o.keyboard_step = +o.keyboard_step; + if (typeof o.grid_num === "string") o.grid_num = +o.grid_num; + + if (o.max < o.min) { + o.max = o.min; + } + + if (vl) { + o.p_values = []; + o.min = 0; + o.max = vl - 1; + o.step = 1; + o.grid_num = o.max; + o.grid_snap = true; + + + for (i = 0; i < vl; i++) { + value = +v[i]; + + if (!isNaN(value)) { + v[i] = value; + value = this._prettify(value); + } else { + value = v[i]; + } + + o.p_values.push(value); + } + } + + if (typeof o.from !== "number" || isNaN(o.from)) { + o.from = o.min; + } + + if (typeof o.to !== "number" || isNaN(o.from)) { + o.to = o.max; + } + + if (o.type === "single") { + + if (o.from < o.min) { + o.from = o.min; + } + + if (o.from > o.max) { + o.from = o.max; + } + + } else { + + if (o.from < o.min || o.from > o.max) { + o.from = o.min; + } + if (o.to > o.max || o.to < o.min) { + o.to = o.max; + } + if (o.from > o.to) { + o.from = o.to; + } + + } + + if (typeof o.step !== "number" || isNaN(o.step) || !o.step || o.step < 0) { + o.step = 1; + } + + if (typeof o.keyboard_step !== "number" || isNaN(o.keyboard_step) || !o.keyboard_step || o.keyboard_step < 0) { + o.keyboard_step = 5; + } + + if (typeof o.from_min === "number" && o.from < o.from_min) { + o.from = o.from_min; + } + + if (typeof o.from_max === "number" && o.from > o.from_max) { + o.from = o.from_max; + } + + if (typeof o.to_min === "number" && o.to < o.to_min) { + o.to = o.to_min; + } + + if (typeof o.to_max === "number" && o.from > o.to_max) { + o.to = o.to_max; + } + + if (r) { + if (r.min !== o.min) { + r.min = o.min; + } + + if (r.max !== o.max) { + r.max = o.max; + } + + if (r.from < r.min || r.from > r.max) { + r.from = o.from; + } + + if (r.to < r.min || r.to > r.max) { + r.to = o.to; + } + } + + if (typeof o.min_interval !== "number" || isNaN(o.min_interval) || !o.min_interval || o.min_interval < 0) { + o.min_interval = 0; + } + + if (typeof o.max_interval !== "number" || isNaN(o.max_interval) || !o.max_interval || o.max_interval < 0) { + o.max_interval = 0; + } + + if (o.min_interval && o.min_interval > o.max - o.min) { + o.min_interval = o.max - o.min; + } + + if (o.max_interval && o.max_interval > o.max - o.min) { + o.max_interval = o.max - o.min; + } + }, + + decorate: function (num, original) { + var decorated = "", + o = this.options; + + if (o.prefix) { + decorated += o.prefix; + } + + decorated += num; + + if (o.max_postfix) { + if (o.values.length && num === o.p_values[o.max]) { + decorated += o.max_postfix; + if (o.postfix) { + decorated += " "; + } + } else if (original === o.max) { + decorated += o.max_postfix; + if (o.postfix) { + decorated += " "; + } + } + } + + if (o.postfix) { + decorated += o.postfix; + } + + return decorated; + }, + + updateFrom: function () { + this.result.from = this.options.from; + this.result.from_percent = this.convertToPercent(this.result.from); + if (this.options.values) { + this.result.from_value = this.options.values[this.result.from]; + } + }, + + updateTo: function () { + this.result.to = this.options.to; + this.result.to_percent = this.convertToPercent(this.result.to); + if (this.options.values) { + this.result.to_value = this.options.values[this.result.to]; + } + }, + + updateResult: function () { + this.result.min = this.options.min; + this.result.max = this.options.max; + this.updateFrom(); + this.updateTo(); + }, + + + // ============================================================================================================= + // Grid + + appendGrid: function () { + if (!this.options.grid) { + return; + } + + var o = this.options, + i, z, + + total = o.max - o.min, + big_num = o.grid_num, + big_p = 0, + big_w = 0, + + small_max = 4, + local_small_max, + small_p, + small_w = 0, + + result, + html = ''; + + + + this.calcGridMargin(); + + if (o.grid_snap) { + big_num = total / o.step; + big_p = this.toFixed(o.step / (total / 100)); + } else { + big_p = this.toFixed(100 / big_num); + } + + if (big_num > 4) { + small_max = 3; + } + if (big_num > 7) { + small_max = 2; + } + if (big_num > 14) { + small_max = 1; + } + if (big_num > 28) { + small_max = 0; + } + + for (i = 0; i < big_num + 1; i++) { + local_small_max = small_max; + + big_w = this.toFixed(big_p * i); + + if (big_w > 100) { + big_w = 100; + + local_small_max -= 2; + if (local_small_max < 0) { + local_small_max = 0; + } + } + this.coords.big[i] = big_w; + + small_p = (big_w - (big_p * (i - 1))) / (local_small_max + 1); + + for (z = 1; z <= local_small_max; z++) { + if (big_w === 0) { + break; + } + + small_w = this.toFixed(big_w - (small_p * z)); + + html += ''; + } + + html += ''; + + result = this.convertToValue(big_w); + if (o.values.length) { + result = o.p_values[result]; + } else { + result = this._prettify(result); + } + + html += '' + result + ''; + } + this.coords.big_num = Math.ceil(big_num + 1); + + + + this.$cache.cont.addClass("irs-with-grid"); + this.$cache.grid.html(html); + this.cacheGridLabels(); + }, + + cacheGridLabels: function () { + var $label, i, + num = this.coords.big_num; + + for (i = 0; i < num; i++) { + $label = this.$cache.grid.find(".js-grid-text-" + i); + this.$cache.grid_labels.push($label); + } + + this.calcGridLabels(); + }, + + calcGridLabels: function () { + var i, label, start = [], finish = [], + num = this.coords.big_num; + + for (i = 0; i < num; i++) { + this.coords.big_w[i] = this.$cache.grid_labels[i].outerWidth(false); + this.coords.big_p[i] = this.toFixed(this.coords.big_w[i] / this.coords.w_rs * 100); + this.coords.big_x[i] = this.toFixed(this.coords.big_p[i] / 2); + + start[i] = this.toFixed(this.coords.big[i] - this.coords.big_x[i]); + finish[i] = this.toFixed(start[i] + this.coords.big_p[i]); + } + + if (this.options.force_edges) { + if (start[0] < -this.coords.grid_gap) { + start[0] = -this.coords.grid_gap; + finish[0] = this.toFixed(start[0] + this.coords.big_p[0]); + + this.coords.big_x[0] = this.coords.grid_gap; + } + + if (finish[num - 1] > 100 + this.coords.grid_gap) { + finish[num - 1] = 100 + this.coords.grid_gap; + start[num - 1] = this.toFixed(finish[num - 1] - this.coords.big_p[num - 1]); + + this.coords.big_x[num - 1] = this.toFixed(this.coords.big_p[num - 1] - this.coords.grid_gap); + } + } + + this.calcGridCollision(2, start, finish); + this.calcGridCollision(4, start, finish); + + for (i = 0; i < num; i++) { + label = this.$cache.grid_labels[i][0]; + label.style.marginLeft = -this.coords.big_x[i] + "%"; + } + }, + + // Collisions Calc Beta + // TODO: Refactor then have plenty of time + calcGridCollision: function (step, start, finish) { + var i, next_i, label, + num = this.coords.big_num; + + for (i = 0; i < num; i += step) { + next_i = i + (step / 2); + if (next_i >= num) { + break; + } + + label = this.$cache.grid_labels[next_i][0]; + + if (finish[i] <= start[next_i]) { + label.style.visibility = "visible"; + } else { + label.style.visibility = "hidden"; + } + } + }, + + calcGridMargin: function () { + if (!this.options.grid_margin) { + return; + } + + this.coords.w_rs = this.$cache.rs.outerWidth(false); + if (!this.coords.w_rs) { + return; + } + + if (this.options.type === "single") { + this.coords.w_handle = this.$cache.s_single.outerWidth(false); + } else { + this.coords.w_handle = this.$cache.s_from.outerWidth(false); + } + this.coords.p_handle = this.toFixed(this.coords.w_handle / this.coords.w_rs * 100); + this.coords.grid_gap = this.toFixed((this.coords.p_handle / 2) - 0.1); + + this.$cache.grid[0].style.width = this.toFixed(100 - this.coords.p_handle) + "%"; + this.$cache.grid[0].style.left = this.coords.grid_gap + "%"; + }, + + + + // ============================================================================================================= + // Public methods + + update: function (options) { + if (!this.input) { + return; + } + + this.is_update = true; + + this.options.from = this.result.from; + this.options.to = this.result.to; + + this.options = $.extend(this.options, options); + this.validate(); + this.updateResult(options); + + this.toggleInput(); + this.remove(); + this.init(true); + }, + + reset: function () { + if (!this.input) { + return; + } + + this.updateResult(); + this.update(); + }, + + destroy: function () { + if (!this.input) { + return; + } + + this.toggleInput(); + this.$cache.input.prop("readonly", false); + $.data(this.input, "ionRangeSlider", null); + + this.remove(); + this.input = null; + this.options = null; + } + }; + + $.fn.ionRangeSlider = function (options) { + return this.each(function() { + if (!$.data(this, "ionRangeSlider")) { + $.data(this, "ionRangeSlider", new IonRangeSlider(this, options, plugin_count++)); + } + }); + }; + + + + // ================================================================================================================= + // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating + + // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel + + // MIT license + + (function() { + var lastTime = 0; + var vendors = ['ms', 'moz', 'webkit', 'o']; + for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] + || window[vendors[x]+'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) + window.requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function() { callback(currTime + timeToCall); }, + timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + + if (!window.cancelAnimationFrame) + window.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; + }()); + +})); diff --git a/frontend/web/js/js_footer.js b/frontend/web/js/js_footer.js new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/frontend/web/js/js_footer.js diff --git a/frontend/web/js/js_head.js b/frontend/web/js/js_head.js new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/frontend/web/js/js_head.js diff --git a/frontend/web/js/new_script.js b/frontend/web/js/new_script.js new file mode 100755 index 0000000..4d671c8 --- /dev/null +++ b/frontend/web/js/new_script.js @@ -0,0 +1,137 @@ +$(document).ready(function () { + showSubMenu(); + activeSubMEnu(); + allSeoTxt(); + loadNewCarousel(); + + + function showSubMenu() { + var timeout; + var timeout2; + $('.new_catalog').hover(function () { + var this_ = $(this) + timeout = setTimeout(function () { + this_.addClass('show') + + + if(!$('.main-cat_ ul li.act').length) { + + $('.main-cat_ ul li:first-child').addClass('act') + + + $('.sub-cat_ ul:first-child').addClass('active-show') + } + + },200) + + clearTimeout(timeout2) + + + },function () { + var this_ = $(this) + clearTimeout(timeout) + timeout2 = setTimeout(function () { + this_.removeClass('show') + $('.main-cat_ ul li').removeClass('act') + $('.sub-cat_ ul').removeClass('active-show') + },200) + + }) + } + + function activeSubMEnu() { + var timeout; + var timeout2; + $('.main-cat_ ul li').hover(function () { + var this_ = $(this) + var thisIndex = this_.index() + var subIndex = $('.sub-cat_ ul') + + timeout = setTimeout(function () { + $('.main-cat_ ul li').removeClass('act') + this_.addClass('act') + $('.sub-cat_ ul').removeClass('active-show') + $(subIndex[thisIndex]).addClass('active-show') + },200) + clearTimeout(timeout2) + + + },function () { + clearTimeout(timeout) + }) + } + + function allSeoTxt() { + var txt1 = 'Развернуть текст'; + var txt2 = 'Свернуть'; + $('.all_seo_text').click(function (e) { + e.preventDefault() + $('.seo-text').toggleClass('show') + $(this).toggleClass('show') + if($(this).hasClass('show')) { + $(this).html(txt2) + } else {$(this).html(txt1)} + }) + } + + + function loadNewCarousel() { + $('.home-popular li a').click(function (e) { + e.preventDefault(); + $('.home-popular li a').parent().removeClass('active') + $(this).parent().addClass('active'); + var status = $(this).data('status') + switch (status) { + case 'new': + $.post( "/ajax/new",function( data ) { + $('.home-popular-slider').html(data); + $('#product_main_slider').owlCarousel({ + navigation:true, + navigationText: [], + responsiveClass: true, + loop:true, + items:4, + mouseDrag:false, + navSpeed:200, + + }) + }); + break; + case 'top': + $.post( "/ajax/top", function( data ) { + $('.home-popular-slider').html(data); + $('#product_main_slider').owlCarousel({ + navigation:true, + navigationText: [], + responsiveClass: true, + loop:true, + items:4, + mouseDrag:false, + navSpeed:200, + + }) + }); + break; + case 'prom': + $.post( "/ajax/prom", function( data ) { + $('.home-popular-slider').html(data); + $('#product_main_slider').owlCarousel({ + navigation:true, + navigationText: [], + responsiveClass: true, + loop:true, + items:4, + mouseDrag:false, + navSpeed:200, + + }) + }); + break; + } + }) + } + + + + +}) \ No newline at end of file diff --git a/frontend/web/js/owl.carousel.js b/frontend/web/js/owl.carousel.js new file mode 100755 index 0000000..f6ef78b --- /dev/null +++ b/frontend/web/js/owl.carousel.js @@ -0,0 +1,3069 @@ +/** + * Owl carousel + * @version 2.0.0 + * @author Bartosz Wojciechowski + * @license The MIT License (MIT) + * @todo Lazy Load Icon + * @todo prevent animationend bubling + * @todo itemsScaleUp + * @todo Test Zepto + * @todo stagePadding calculate wrong active classes + */ +;(function($, window, document, undefined) { + + var drag, state, e; + + /** + * Template for status information about drag and touch events. + * @private + */ + drag = { + start: 0, + startX: 0, + startY: 0, + current: 0, + currentX: 0, + currentY: 0, + offsetX: 0, + offsetY: 0, + distance: null, + startTime: 0, + endTime: 0, + updatedX: 0, + targetEl: null + }; + + /** + * Template for some status informations. + * @private + */ + state = { + isTouch: false, + isScrolling: false, + isSwiping: false, + direction: false, + inMotion: false + }; + + /** + * Event functions references. + * @private + */ + e = { + _onDragStart: null, + _onDragMove: null, + _onDragEnd: null, + _transitionEnd: null, + _resizer: null, + _responsiveCall: null, + _goToLoop: null, + _checkVisibile: null + }; + + /** + * Creates a carousel. + * @class The Owl Carousel. + * @public + * @param {HTMLElement|jQuery} element - The element to create the carousel for. + * @param {Object} [options] - The options + */ + function Owl(element, options) { + + /** + * Current settings for the carousel. + * @public + */ + this.settings = null; + + /** + * Current options set by the caller including defaults. + * @public + */ + this.options = $.extend({}, Owl.Defaults, options); + + /** + * Plugin element. + * @public + */ + this.$element = $(element); + + /** + * Caches informations about drag and touch events. + */ + this.drag = $.extend({}, drag); + + /** + * Caches some status informations. + * @protected + */ + this.state = $.extend({}, state); + + /** + * @protected + * @todo Must be documented + */ + this.e = $.extend({}, e); + + /** + * References to the running plugins of this carousel. + * @protected + */ + this._plugins = {}; + + /** + * Currently suppressed events to prevent them from beeing retriggered. + * @protected + */ + this._supress = {}; + + /** + * Absolute current position. + * @protected + */ + this._current = null; + + /** + * Animation speed in milliseconds. + * @protected + */ + this._speed = null; + + /** + * Coordinates of all items in pixel. + * @todo The name of this member is missleading. + * @protected + */ + this._coordinates = []; + + /** + * Current breakpoint. + * @todo Real media queries would be nice. + * @protected + */ + this._breakpoint = null; + + /** + * Current width of the plugin element. + */ + this._width = null; + + /** + * All real items. + * @protected + */ + this._items = []; + + /** + * All cloned items. + * @protected + */ + this._clones = []; + + /** + * Merge values of all items. + * @todo Maybe this could be part of a plugin. + * @protected + */ + this._mergers = []; + + /** + * Invalidated parts within the update process. + * @protected + */ + this._invalidated = {}; + + /** + * Ordered list of workers for the update process. + * @protected + */ + this._pipe = []; + + $.each(Owl.Plugins, $.proxy(function(key, plugin) { + this._plugins[key[0].toLowerCase() + key.slice(1)] + = new plugin(this); + }, this)); + + $.each(Owl.Pipe, $.proxy(function(priority, worker) { + this._pipe.push({ + 'filter': worker.filter, + 'run': $.proxy(worker.run, this) + }); + }, this)); + + this.setup(); + this.initialize(); + } + + /** + * Default options for the carousel. + * @public + */ + Owl.Defaults = { + items: 3, + loop: false, + center: false, + + mouseDrag: true, + touchDrag: true, + pullDrag: true, + freeDrag: false, + + margin: 0, + stagePadding: 0, + + merge: false, + mergeFit: true, + autoWidth: false, + + startPosition: 0, + rtl: false, + + smartSpeed: 250, + fluidSpeed: false, + dragEndSpeed: false, + + responsive: {}, + responsiveRefreshRate: 200, + responsiveBaseElement: window, + responsiveClass: false, + + fallbackEasing: 'swing', + + info: false, + + nestedItemSelector: false, + itemElement: 'div', + stageElement: 'div', + + // Classes and Names + themeClass: 'owl-theme', + baseClass: 'owl-carousel', + itemClass: 'owl-item', + centerClass: 'center', + activeClass: 'active' + }; + + /** + * Enumeration for width. + * @public + * @readonly + * @enum {String} + */ + Owl.Width = { + Default: 'default', + Inner: 'inner', + Outer: 'outer' + }; + + /** + * Contains all registered plugins. + * @public + */ + Owl.Plugins = {}; + + /** + * Update pipe. + */ + Owl.Pipe = [ { + filter: [ 'width', 'items', 'settings' ], + run: function(cache) { + cache.current = this._items && this._items[this.relative(this._current)]; + } + }, { + filter: [ 'items', 'settings' ], + run: function() { + var cached = this._clones, + clones = this.$stage.children('.cloned'); + + if (clones.length !== cached.length || (!this.settings.loop && cached.length > 0)) { + this.$stage.children('.cloned').remove(); + this._clones = []; + } + } + }, { + filter: [ 'items', 'settings' ], + run: function() { + var i, n, + clones = this._clones, + items = this._items, + delta = this.settings.loop ? clones.length - Math.max(this.settings.items * 2, 4) : 0; + + for (i = 0, n = Math.abs(delta / 2); i < n; i++) { + if (delta > 0) { + this.$stage.children().eq(items.length + clones.length - 1).remove(); + clones.pop(); + this.$stage.children().eq(0).remove(); + clones.pop(); + } else { + clones.push(clones.length / 2); + this.$stage.append(items[clones[clones.length - 1]].clone().addClass('cloned')); + clones.push(items.length - 1 - (clones.length - 1) / 2); + this.$stage.prepend(items[clones[clones.length - 1]].clone().addClass('cloned')); + } + } + } + }, { + filter: [ 'width', 'items', 'settings' ], + run: function() { + var rtl = (this.settings.rtl ? 1 : -1), + width = (this.width() / this.settings.items).toFixed(3), + coordinate = 0, merge, i, n; + + this._coordinates = []; + for (i = 0, n = this._clones.length + this._items.length; i < n; i++) { + merge = this._mergers[this.relative(i)]; + merge = (this.settings.mergeFit && Math.min(merge, this.settings.items)) || merge; + coordinate += (this.settings.autoWidth ? this._items[this.relative(i)].width() + this.settings.margin : width * merge) * rtl; + + this._coordinates.push(coordinate); + } + } + }, { + filter: [ 'width', 'items', 'settings' ], + run: function() { + var i, n, width = (this.width() / this.settings.items).toFixed(3), css = { + 'width': Math.abs(this._coordinates[this._coordinates.length - 1]) + this.settings.stagePadding * 2, + 'padding-left': this.settings.stagePadding || '', + 'padding-right': this.settings.stagePadding || '' + }; + + this.$stage.css(css); + + css = { 'width': this.settings.autoWidth ? 'auto' : width - this.settings.margin }; + css[this.settings.rtl ? 'margin-left' : 'margin-right'] = this.settings.margin; + + if (!this.settings.autoWidth && $.grep(this._mergers, function(v) { return v > 1 }).length > 0) { + for (i = 0, n = this._coordinates.length; i < n; i++) { + css.width = Math.abs(this._coordinates[i]) - Math.abs(this._coordinates[i - 1] || 0) - this.settings.margin; + this.$stage.children().eq(i).css(css); + } + } else { + this.$stage.children().css(css); + } + } + }, { + filter: [ 'width', 'items', 'settings' ], + run: function(cache) { + cache.current && this.reset(this.$stage.children().index(cache.current)); + } + }, { + filter: [ 'position' ], + run: function() { + this.animate(this.coordinates(this._current)); + } + }, { + filter: [ 'width', 'position', 'items', 'settings' ], + run: function() { + var rtl = this.settings.rtl ? 1 : -1, + padding = this.settings.stagePadding * 2, + begin = this.coordinates(this.current()) + padding, + end = begin + this.width() * rtl, + inner, outer, matches = [], i, n; + + for (i = 0, n = this._coordinates.length; i < n; i++) { + inner = this._coordinates[i - 1] || 0; + outer = Math.abs(this._coordinates[i]) + padding * rtl; + + if ((this.op(inner, '<=', begin) && (this.op(inner, '>', end))) + || (this.op(outer, '<', begin) && this.op(outer, '>', end))) { + matches.push(i); + } + } + + this.$stage.children('.' + this.settings.activeClass).removeClass(this.settings.activeClass); + this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass(this.settings.activeClass); + + if (this.settings.center) { + this.$stage.children('.' + this.settings.centerClass).removeClass(this.settings.centerClass); + this.$stage.children().eq(this.current()).addClass(this.settings.centerClass); + } + } + } ]; + + /** + * Initializes the carousel. + * @protected + */ + Owl.prototype.initialize = function() { + this.trigger('initialize'); + + this.$element + .addClass(this.settings.baseClass) + .addClass(this.settings.themeClass) + .toggleClass('owl-rtl', this.settings.rtl); + + // check support + this.browserSupport(); + + if (this.settings.autoWidth && this.state.imagesLoaded !== true) { + var imgs, nestedSelector, width; + imgs = this.$element.find('img'); + nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined; + width = this.$element.children(nestedSelector).width(); + + if (imgs.length && width <= 0) { + this.preloadAutoWidthImages(imgs); + return false; + } + } + + this.$element.addClass('owl-loading'); + + // create stage + this.$stage = $('<' + this.settings.stageElement + ' class="owl-stage"/>') + .wrap('
    '); + + // append stage + this.$element.append(this.$stage.parent()); + + // append content + this.replace(this.$element.children().not(this.$stage.parent())); + + // set view width + this._width = this.$element.width(); + + // update view + this.refresh(); + + this.$element.removeClass('owl-loading').addClass('owl-loaded'); + + // attach generic events + this.eventsCall(); + + // attach generic events + this.internalEvents(); + + // attach custom control events + this.addTriggerableEvents(); + + this.trigger('initialized'); + }; + + /** + * Setups the current settings. + * @todo Remove responsive classes. Why should adaptive designs be brought into IE8? + * @todo Support for media queries by using `matchMedia` would be nice. + * @public + */ + Owl.prototype.setup = function() { + var viewport = this.viewport(), + overwrites = this.options.responsive, + match = -1, + settings = null; + + if (!overwrites) { + settings = $.extend({}, this.options); + } else { + $.each(overwrites, function(breakpoint) { + if (breakpoint <= viewport && breakpoint > match) { + match = Number(breakpoint); + } + }); + + settings = $.extend({}, this.options, overwrites[match]); + delete settings.responsive; + + // responsive class + if (settings.responsiveClass) { + this.$element.attr('class', function(i, c) { + return c.replace(/\b owl-responsive-\S+/g, ''); + }).addClass('owl-responsive-' + match); + } + } + + if (this.settings === null || this._breakpoint !== match) { + this.trigger('change', { property: { name: 'settings', value: settings } }); + this._breakpoint = match; + this.settings = settings; + this.invalidate('settings'); + this.trigger('changed', { property: { name: 'settings', value: this.settings } }); + } + }; + + /** + * Updates option logic if necessery. + * @protected + */ + Owl.prototype.optionsLogic = function() { + // Toggle Center class + this.$element.toggleClass('owl-center', this.settings.center); + + // if items number is less than in body + if (this.settings.loop && this._items.length < this.settings.items) { + this.settings.loop = false; + } + + if (this.settings.autoWidth) { + this.settings.stagePadding = false; + this.settings.merge = false; + } + }; + + /** + * Prepares an item before add. + * @todo Rename event parameter `content` to `item`. + * @protected + * @returns {jQuery|HTMLElement} - The item container. + */ + Owl.prototype.prepare = function(item) { + var event = this.trigger('prepare', { content: item }); + + if (!event.data) { + event.data = $('<' + this.settings.itemElement + '/>') + .addClass(this.settings.itemClass).append(item) + } + + this.trigger('prepared', { content: event.data }); + + return event.data; + }; + + /** + * Updates the view. + * @public + */ + Owl.prototype.update = function() { + var i = 0, + n = this._pipe.length, + filter = $.proxy(function(p) { return this[p] }, this._invalidated), + cache = {}; + + while (i < n) { + if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) { + this._pipe[i].run(cache); + } + i++; + } + + this._invalidated = {}; + }; + + /** + * Gets the width of the view. + * @public + * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return. + * @returns {Number} - The width of the view in pixel. + */ + Owl.prototype.width = function(dimension) { + dimension = dimension || Owl.Width.Default; + switch (dimension) { + case Owl.Width.Inner: + case Owl.Width.Outer: + return this._width; + default: + return this._width - this.settings.stagePadding * 2 + this.settings.margin; + } + }; + + /** + * Refreshes the carousel primarily for adaptive purposes. + * @public + */ + Owl.prototype.refresh = function() { + if (this._items.length === 0) { + return false; + } + + var start = new Date().getTime(); + + this.trigger('refresh'); + + this.setup(); + + this.optionsLogic(); + + // hide and show methods helps here to set a proper widths, + // this prevents scrollbar to be calculated in stage width + this.$stage.addClass('owl-refresh'); + + this.update(); + + this.$stage.removeClass('owl-refresh'); + + this.state.orientation = window.orientation; + + this.watchVisibility(); + + this.trigger('refreshed'); + }; + + /** + * Save internal event references and add event based functions. + * @protected + */ + Owl.prototype.eventsCall = function() { + // Save events references + this.e._onDragStart = $.proxy(function(e) { + this.onDragStart(e); + }, this); + this.e._onDragMove = $.proxy(function(e) { + this.onDragMove(e); + }, this); + this.e._onDragEnd = $.proxy(function(e) { + this.onDragEnd(e); + }, this); + this.e._onResize = $.proxy(function(e) { + this.onResize(e); + }, this); + this.e._transitionEnd = $.proxy(function(e) { + this.transitionEnd(e); + }, this); + this.e._preventClick = $.proxy(function(e) { + this.preventClick(e); + }, this); + }; + + /** + * Checks window `resize` event. + * @protected + */ + Owl.prototype.onThrottledResize = function() { + window.clearTimeout(this.resizeTimer); + this.resizeTimer = window.setTimeout(this.e._onResize, this.settings.responsiveRefreshRate); + }; + + /** + * Checks window `resize` event. + * @protected + */ + Owl.prototype.onResize = function() { + if (!this._items.length) { + return false; + } + + if (this._width === this.$element.width()) { + return false; + } + + if (this.trigger('resize').isDefaultPrevented()) { + return false; + } + + this._width = this.$element.width(); + + this.invalidate('width'); + + this.refresh(); + + this.trigger('resized'); + }; + + /** + * Checks for touch/mouse drag event type and add run event handlers. + * @protected + */ + Owl.prototype.eventsRouter = function(event) { + var type = event.type; + + if (type === "mousedown" || type === "touchstart") { + this.onDragStart(event); + } else if (type === "mousemove" || type === "touchmove") { + this.onDragMove(event); + } else if (type === "mouseup" || type === "touchend") { + this.onDragEnd(event); + } else if (type === "touchcancel") { + this.onDragEnd(event); + } + }; + + /** + * Checks for touch/mouse drag options and add necessery event handlers. + * @protected + */ + Owl.prototype.internalEvents = function() { + var isTouch = isTouchSupport(), + isTouchIE = isTouchSupportIE(); + + if (this.settings.mouseDrag){ + this.$stage.on('mousedown', $.proxy(function(event) { this.eventsRouter(event) }, this)); + this.$stage.on('dragstart', function() { return false }); + this.$stage.get(0).onselectstart = function() { return false }; + } else { + this.$element.addClass('owl-text-select-on'); + } + + if (this.settings.touchDrag && !isTouchIE){ + this.$stage.on('touchstart touchcancel', $.proxy(function(event) { this.eventsRouter(event) }, this)); + } + + // catch transitionEnd event + if (this.transitionEndVendor) { + this.on(this.$stage.get(0), this.transitionEndVendor, this.e._transitionEnd, false); + } + + // responsive + if (this.settings.responsive !== false) { + this.on(window, 'resize', $.proxy(this.onThrottledResize, this)); + } + }; + + /** + * Handles touchstart/mousedown event. + * @protected + * @param {Event} event - The event arguments. + */ + Owl.prototype.onDragStart = function(event) { + var ev, isTouchEvent, pageX, pageY, animatedPos; + + ev = event.originalEvent || event || window.event; + + // prevent right click + if (ev.which === 3 || this.state.isTouch) { + return false; + } + + if (ev.type === 'mousedown') { + this.$stage.addClass('owl-grab'); + } + + this.trigger('drag'); + this.drag.startTime = new Date().getTime(); + this.speed(0); + this.state.isTouch = true; + this.state.isScrolling = false; + this.state.isSwiping = false; + this.drag.distance = 0; + + pageX = getTouches(ev).x; + pageY = getTouches(ev).y; + + // get stage position left + this.drag.offsetX = this.$stage.position().left; + this.drag.offsetY = this.$stage.position().top; + + if (this.settings.rtl) { + this.drag.offsetX = this.$stage.position().left + this.$stage.width() - this.width() + + this.settings.margin; + } + + // catch position // ie to fix + if (this.state.inMotion && this.support3d) { + animatedPos = this.getTransformProperty(); + this.drag.offsetX = animatedPos; + this.animate(animatedPos); + this.state.inMotion = true; + } else if (this.state.inMotion && !this.support3d) { + this.state.inMotion = false; + return false; + } + + this.drag.startX = pageX - this.drag.offsetX; + this.drag.startY = pageY - this.drag.offsetY; + + this.drag.start = pageX - this.drag.startX; + this.drag.targetEl = ev.target || ev.srcElement; + this.drag.updatedX = this.drag.start; + + // to do/check + // prevent links and images dragging; + if (this.drag.targetEl.tagName === "IMG" || this.drag.targetEl.tagName === "A") { + this.drag.targetEl.draggable = false; + } + + $(document).on('mousemove.owl.dragEvents mouseup.owl.dragEvents touchmove.owl.dragEvents touchend.owl.dragEvents', $.proxy(function(event) {this.eventsRouter(event)},this)); + }; + + /** + * Handles the touchmove/mousemove events. + * @todo Simplify + * @protected + * @param {Event} event - The event arguments. + */ + Owl.prototype.onDragMove = function(event) { + var ev, isTouchEvent, pageX, pageY, minValue, maxValue, pull; + + if (!this.state.isTouch) { + return; + } + + if (this.state.isScrolling) { + return; + } + + ev = event.originalEvent || event || window.event; + + pageX = getTouches(ev).x; + pageY = getTouches(ev).y; + + // Drag Direction + this.drag.currentX = pageX - this.drag.startX; + this.drag.currentY = pageY - this.drag.startY; + this.drag.distance = this.drag.currentX - this.drag.offsetX; + + // Check move direction + if (this.drag.distance < 0) { + this.state.direction = this.settings.rtl ? 'right' : 'left'; + } else if (this.drag.distance > 0) { + this.state.direction = this.settings.rtl ? 'left' : 'right'; + } + // Loop + if (this.settings.loop) { + if (this.op(this.drag.currentX, '>', this.coordinates(this.minimum())) && this.state.direction === 'right') { + this.drag.currentX -= (this.settings.center && this.coordinates(0)) - this.coordinates(this._items.length); + } else if (this.op(this.drag.currentX, '<', this.coordinates(this.maximum())) && this.state.direction === 'left') { + this.drag.currentX += (this.settings.center && this.coordinates(0)) - this.coordinates(this._items.length); + } + } else { + // pull + minValue = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum()); + maxValue = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum()); + pull = this.settings.pullDrag ? this.drag.distance / 5 : 0; + this.drag.currentX = Math.max(Math.min(this.drag.currentX, minValue + pull), maxValue + pull); + } + + // Lock browser if swiping horizontal + + if ((this.drag.distance > 8 || this.drag.distance < -8)) { + if (ev.preventDefault !== undefined) { + ev.preventDefault(); + } else { + ev.returnValue = false; + } + this.state.isSwiping = true; + } + + this.drag.updatedX = this.drag.currentX; + + // Lock Owl if scrolling + if ((this.drag.currentY > 16 || this.drag.currentY < -16) && this.state.isSwiping === false) { + this.state.isScrolling = true; + this.drag.updatedX = this.drag.start; + } + + this.animate(this.drag.updatedX); + }; + + /** + * Handles the touchend/mouseup events. + * @protected + */ + Owl.prototype.onDragEnd = function(event) { + var compareTimes, distanceAbs, closest; + + if (!this.state.isTouch) { + return; + } + + if (event.type === 'mouseup') { + this.$stage.removeClass('owl-grab'); + } + + this.trigger('dragged'); + + // prevent links and images dragging; + this.drag.targetEl.removeAttribute("draggable"); + + // remove drag event listeners + + this.state.isTouch = false; + this.state.isScrolling = false; + this.state.isSwiping = false; + + // to check + if (this.drag.distance === 0 && this.state.inMotion !== true) { + this.state.inMotion = false; + return false; + } + + // prevent clicks while scrolling + + this.drag.endTime = new Date().getTime(); + compareTimes = this.drag.endTime - this.drag.startTime; + distanceAbs = Math.abs(this.drag.distance); + + // to test + if (distanceAbs > 3 || compareTimes > 300) { + this.removeClick(this.drag.targetEl); + } + + closest = this.closest(this.drag.updatedX); + + this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed); + this.current(closest); + this.invalidate('position'); + this.update(); + + // if pullDrag is off then fire transitionEnd event manually when stick + // to border + if (!this.settings.pullDrag && this.drag.updatedX === this.coordinates(closest)) { + this.transitionEnd(); + } + + this.drag.distance = 0; + + $(document).off('.owl.dragEvents'); + }; + + /** + * Attaches `preventClick` to disable link while swipping. + * @protected + * @param {HTMLElement} [target] - The target of the `click` event. + */ + Owl.prototype.removeClick = function(target) { + this.drag.targetEl = target; + $(target).on('click.preventClick', this.e._preventClick); + // to make sure click is removed: + window.setTimeout(function() { + $(target).off('click.preventClick'); + }, 300); + }; + + /** + * Suppresses click event. + * @protected + * @param {Event} ev - The event arguments. + */ + Owl.prototype.preventClick = function(ev) { + if (ev.preventDefault) { + ev.preventDefault(); + } else { + ev.returnValue = false; + } + if (ev.stopPropagation) { + ev.stopPropagation(); + } + $(ev.target).off('click.preventClick'); + }; + + /** + * Catches stage position while animate (only CSS3). + * @protected + * @returns + */ + Owl.prototype.getTransformProperty = function() { + var transform, matrix3d; + + transform = window.getComputedStyle(this.$stage.get(0), null).getPropertyValue(this.vendorName + 'transform'); + // var transform = this.$stage.css(this.vendorName + 'transform') + transform = transform.replace(/matrix(3d)?\(|\)/g, '').split(','); + matrix3d = transform.length === 16; + + return matrix3d !== true ? transform[4] : transform[12]; + }; + + /** + * Gets absolute position of the closest item for a coordinate. + * @todo Setting `freeDrag` makes `closest` not reusable. See #165. + * @protected + * @param {Number} coordinate - The coordinate in pixel. + * @return {Number} - The absolute position of the closest item. + */ + Owl.prototype.closest = function(coordinate) { + var position = -1, pull = 30, width = this.width(), coordinates = this.coordinates(); + + if (!this.settings.freeDrag) { + // check closest item + $.each(coordinates, $.proxy(function(index, value) { + if (coordinate > value - pull && coordinate < value + pull) { + position = index; + } else if (this.op(coordinate, '<', value) + && this.op(coordinate, '>', coordinates[index + 1] || value - width)) { + position = this.state.direction === 'left' ? index + 1 : index; + } + return position === -1; + }, this)); + } + + if (!this.settings.loop) { + // non loop boundries + if (this.op(coordinate, '>', coordinates[this.minimum()])) { + position = coordinate = this.minimum(); + } else if (this.op(coordinate, '<', coordinates[this.maximum()])) { + position = coordinate = this.maximum(); + } + } + + return position; + }; + + /** + * Animates the stage. + * @public + * @param {Number} coordinate - The coordinate in pixels. + */ + Owl.prototype.animate = function(coordinate) { + this.trigger('translate'); + this.state.inMotion = this.speed() > 0; + + if (this.support3d) { + this.$stage.css({ + transform: 'translate3d(' + coordinate + 'px' + ',0px, 0px)', + transition: (this.speed() / 1000) + 's' + }); + } else if (this.state.isTouch) { + this.$stage.css({ + left: coordinate + 'px' + }); + } else { + this.$stage.animate({ + left: coordinate + }, this.speed() / 1000, this.settings.fallbackEasing, $.proxy(function() { + if (this.state.inMotion) { + this.transitionEnd(); + } + }, this)); + } + }; + + /** + * Sets the absolute position of the current item. + * @public + * @param {Number} [position] - The new absolute position or nothing to leave it unchanged. + * @returns {Number} - The absolute position of the current item. + */ + Owl.prototype.current = function(position) { + if (position === undefined) { + return this._current; + } + + if (this._items.length === 0) { + return undefined; + } + + position = this.normalize(position); + + if (this._current !== position) { + var event = this.trigger('change', { property: { name: 'position', value: position } }); + + if (event.data !== undefined) { + position = this.normalize(event.data); + } + + this._current = position; + + this.invalidate('position'); + + this.trigger('changed', { property: { name: 'position', value: this._current } }); + } + + return this._current; + }; + + /** + * Invalidates the given part of the update routine. + * @param {String} part - The part to invalidate. + */ + Owl.prototype.invalidate = function(part) { + this._invalidated[part] = true; + } + + /** + * Resets the absolute position of the current item. + * @public + * @param {Number} position - The absolute position of the new item. + */ + Owl.prototype.reset = function(position) { + position = this.normalize(position); + + if (position === undefined) { + return; + } + + this._speed = 0; + this._current = position; + + this.suppress([ 'translate', 'translated' ]); + + this.animate(this.coordinates(position)); + + this.release([ 'translate', 'translated' ]); + }; + + /** + * Normalizes an absolute or a relative position for an item. + * @public + * @param {Number} position - The absolute or relative position to normalize. + * @param {Boolean} [relative=false] - Whether the given position is relative or not. + * @returns {Number} - The normalized position. + */ + Owl.prototype.normalize = function(position, relative) { + var n = (relative ? this._items.length : this._items.length + this._clones.length); + + if (!$.isNumeric(position) || n < 1) { + return undefined; + } + + if (this._clones.length) { + position = ((position % n) + n) % n; + } else { + position = Math.max(this.minimum(relative), Math.min(this.maximum(relative), position)); + } + + return position; + }; + + /** + * Converts an absolute position for an item into a relative position. + * @public + * @param {Number} position - The absolute position to convert. + * @returns {Number} - The converted position. + */ + Owl.prototype.relative = function(position) { + position = this.normalize(position); + position = position - this._clones.length / 2; + return this.normalize(position, true); + }; + + /** + * Gets the maximum position for an item. + * @public + * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position. + * @returns {Number} + */ + Owl.prototype.maximum = function(relative) { + var maximum, width, i = 0, coordinate, + settings = this.settings; + + if (relative) { + return this._items.length - 1; + } + + if (!settings.loop && settings.center) { + maximum = this._items.length - 1; + } else if (!settings.loop && !settings.center) { + maximum = this._items.length - settings.items; + } else if (settings.loop || settings.center) { + maximum = this._items.length + settings.items; + } else if (settings.autoWidth || settings.merge) { + revert = settings.rtl ? 1 : -1; + width = this.$stage.width() - this.$element.width(); + while (coordinate = this.coordinates(i)) { + if (coordinate * revert >= width) { + break; + } + maximum = ++i; + } + } else { + throw 'Can not detect maximum absolute position.' + } + + return maximum; + }; + + /** + * Gets the minimum position for an item. + * @public + * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position. + * @returns {Number} + */ + Owl.prototype.minimum = function(relative) { + if (relative) { + return 0; + } + + return this._clones.length / 2; + }; + + /** + * Gets an item at the specified relative position. + * @public + * @param {Number} [position] - The relative position of the item. + * @return {jQuery|Array.} - The item at the given position or all items if no position was given. + */ + Owl.prototype.items = function(position) { + if (position === undefined) { + return this._items.slice(); + } + + position = this.normalize(position, true); + return this._items[position]; + }; + + /** + * Gets an item at the specified relative position. + * @public + * @param {Number} [position] - The relative position of the item. + * @return {jQuery|Array.} - The item at the given position or all items if no position was given. + */ + Owl.prototype.mergers = function(position) { + if (position === undefined) { + return this._mergers.slice(); + } + + position = this.normalize(position, true); + return this._mergers[position]; + }; + + /** + * Gets the absolute positions of clones for an item. + * @public + * @param {Number} [position] - The relative position of the item. + * @returns {Array.} - The absolute positions of clones for the item or all if no position was given. + */ + Owl.prototype.clones = function(position) { + var odd = this._clones.length / 2, + even = odd + this._items.length, + map = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 }; + + if (position === undefined) { + return $.map(this._clones, function(v, i) { return map(i) }); + } + + return $.map(this._clones, function(v, i) { return v === position ? map(i) : null }); + }; + + /** + * Sets the current animation speed. + * @public + * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged. + * @returns {Number} - The current animation speed in milliseconds. + */ + Owl.prototype.speed = function(speed) { + if (speed !== undefined) { + this._speed = speed; + } + + return this._speed; + }; + + /** + * Gets the coordinate of an item. + * @todo The name of this method is missleanding. + * @public + * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`. + * @returns {Number|Array.} - The coordinate of the item in pixel or all coordinates. + */ + Owl.prototype.coordinates = function(position) { + var coordinate = null; + + if (position === undefined) { + return $.map(this._coordinates, $.proxy(function(coordinate, index) { + return this.coordinates(index); + }, this)); + } + + if (this.settings.center) { + coordinate = this._coordinates[position]; + coordinate += (this.width() - coordinate + (this._coordinates[position - 1] || 0)) / 2 * (this.settings.rtl ? -1 : 1); + } else { + coordinate = this._coordinates[position - 1] || 0; + } + + return coordinate; + }; + + /** + * Calculates the speed for a translation. + * @protected + * @param {Number} from - The absolute position of the start item. + * @param {Number} to - The absolute position of the target item. + * @param {Number} [factor=undefined] - The time factor in milliseconds. + * @returns {Number} - The time in milliseconds for the translation. + */ + Owl.prototype.duration = function(from, to, factor) { + return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed)); + }; + + /** + * Slides to the specified item. + * @public + * @param {Number} position - The position of the item. + * @param {Number} [speed] - The time in milliseconds for the transition. + */ + Owl.prototype.to = function(position, speed) { + if (this.settings.loop) { + var distance = position - this.relative(this.current()), + revert = this.current(), + before = this.current(), + after = this.current() + distance, + direction = before - after < 0 ? true : false, + items = this._clones.length + this._items.length; + + if (after < this.settings.items && direction === false) { + revert = before + this._items.length; + this.reset(revert); + } else if (after >= items - this.settings.items && direction === true) { + revert = before - this._items.length; + this.reset(revert); + } + window.clearTimeout(this.e._goToLoop); + this.e._goToLoop = window.setTimeout($.proxy(function() { + this.speed(this.duration(this.current(), revert + distance, speed)); + this.current(revert + distance); + this.update(); + }, this), 30); + } else { + this.speed(this.duration(this.current(), position, speed)); + this.current(position); + this.update(); + } + }; + + /** + * Slides to the next item. + * @public + * @param {Number} [speed] - The time in milliseconds for the transition. + */ + Owl.prototype.next = function(speed) { + speed = speed || false; + this.to(this.relative(this.current()) + 1, speed); + }; + + /** + * Slides to the previous item. + * @public + * @param {Number} [speed] - The time in milliseconds for the transition. + */ + Owl.prototype.prev = function(speed) { + speed = speed || false; + this.to(this.relative(this.current()) - 1, speed); + }; + + /** + * Handles the end of an animation. + * @protected + * @param {Event} event - The event arguments. + */ + Owl.prototype.transitionEnd = function(event) { + + // if css2 animation then event object is undefined + if (event !== undefined) { + event.stopPropagation(); + + // Catch only owl-stage transitionEnd event + if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) { + return false; + } + } + + this.state.inMotion = false; + this.trigger('translated'); + }; + + /** + * Gets viewport width. + * @protected + * @return {Number} - The width in pixel. + */ + Owl.prototype.viewport = function() { + var width; + if (this.options.responsiveBaseElement !== window) { + width = $(this.options.responsiveBaseElement).width(); + } else if (window.innerWidth) { + width = window.innerWidth; + } else if (document.documentElement && document.documentElement.clientWidth) { + width = document.documentElement.clientWidth; + } else { + throw 'Can not detect viewport width.'; + } + return width; + }; + + /** + * Replaces the current content. + * @public + * @param {HTMLElement|jQuery|String} content - The new content. + */ + Owl.prototype.replace = function(content) { + this.$stage.empty(); + this._items = []; + + if (content) { + content = (content instanceof jQuery) ? content : $(content); + } + + if (this.settings.nestedItemSelector) { + content = content.find('.' + this.settings.nestedItemSelector); + } + + content.filter(function() { + return this.nodeType === 1; + }).each($.proxy(function(index, item) { + item = this.prepare(item); + this.$stage.append(item); + this._items.push(item); + this._mergers.push(item.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1); + }, this)); + + this.reset($.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0); + + this.invalidate('items'); + }; + + /** + * Adds an item. + * @todo Use `item` instead of `content` for the event arguments. + * @public + * @param {HTMLElement|jQuery|String} content - The item content to add. + * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end. + */ + Owl.prototype.add = function(content, position) { + position = position === undefined ? this._items.length : this.normalize(position, true); + + this.trigger('add', { content: content, position: position }); + + if (this._items.length === 0 || position === this._items.length) { + this.$stage.append(content); + this._items.push(content); + this._mergers.push(content.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1); + } else { + this._items[position].before(content); + this._items.splice(position, 0, content); + this._mergers.splice(position, 0, content.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1); + } + + this.invalidate('items'); + + this.trigger('added', { content: content, position: position }); + }; + + /** + * Removes an item by its position. + * @todo Use `item` instead of `content` for the event arguments. + * @public + * @param {Number} position - The relative position of the item to remove. + */ + Owl.prototype.remove = function(position) { + position = this.normalize(position, true); + + if (position === undefined) { + return; + } + + this.trigger('remove', { content: this._items[position], position: position }); + + this._items[position].remove(); + this._items.splice(position, 1); + this._mergers.splice(position, 1); + + this.invalidate('items'); + + this.trigger('removed', { content: null, position: position }); + }; + + /** + * Adds triggerable events. + * @protected + */ + Owl.prototype.addTriggerableEvents = function() { + var handler = $.proxy(function(callback, event) { + return $.proxy(function(e) { + if (e.relatedTarget !== this) { + this.suppress([ event ]); + callback.apply(this, [].slice.call(arguments, 1)); + this.release([ event ]); + } + }, this); + }, this); + + $.each({ + 'next': this.next, + 'prev': this.prev, + 'to': this.to, + 'destroy': this.destroy, + 'refresh': this.refresh, + 'replace': this.replace, + 'add': this.add, + 'remove': this.remove + }, $.proxy(function(event, callback) { + this.$element.on(event + '.owl.carousel', handler(callback, event + '.owl.carousel')); + }, this)); + + }; + + /** + * Watches the visibility of the carousel element. + * @protected + */ + Owl.prototype.watchVisibility = function() { + + // test on zepto + if (!isElVisible(this.$element.get(0))) { + this.$element.addClass('owl-hidden'); + window.clearInterval(this.e._checkVisibile); + this.e._checkVisibile = window.setInterval($.proxy(checkVisible, this), 500); + } + + function isElVisible(el) { + return el.offsetWidth > 0 && el.offsetHeight > 0; + } + + function checkVisible() { + if (isElVisible(this.$element.get(0))) { + this.$element.removeClass('owl-hidden'); + this.refresh(); + window.clearInterval(this.e._checkVisibile); + } + } + }; + + /** + * Preloads images with auto width. + * @protected + * @todo Still to test + */ + Owl.prototype.preloadAutoWidthImages = function(imgs) { + var loaded, that, $el, img; + + loaded = 0; + that = this; + imgs.each(function(i, el) { + $el = $(el); + img = new Image(); + + img.onload = function() { + loaded++; + $el.attr('src', img.src); + $el.css('opacity', 1); + if (loaded >= imgs.length) { + that.state.imagesLoaded = true; + that.initialize(); + } + }; + + img.src = $el.attr('src') || $el.attr('data-src') || $el.attr('data-src-retina'); + }); + }; + + /** + * Destroys the carousel. + * @public + */ + Owl.prototype.destroy = function() { + + if (this.$element.hasClass(this.settings.themeClass)) { + this.$element.removeClass(this.settings.themeClass); + } + + if (this.settings.responsive !== false) { + $(window).off('resize.owl.carousel'); + } + + if (this.transitionEndVendor) { + this.off(this.$stage.get(0), this.transitionEndVendor, this.e._transitionEnd); + } + + for ( var i in this._plugins) { + this._plugins[i].destroy(); + } + + if (this.settings.mouseDrag || this.settings.touchDrag) { + this.$stage.off('mousedown touchstart touchcancel'); + $(document).off('.owl.dragEvents'); + this.$stage.get(0).onselectstart = function() {}; + this.$stage.off('dragstart', function() { return false }); + } + + // remove event handlers in the ".owl.carousel" namespace + this.$element.off('.owl'); + + this.$stage.children('.cloned').remove(); + this.e = null; + this.$element.removeData('owlCarousel'); + + this.$stage.children().contents().unwrap(); + this.$stage.children().unwrap(); + this.$stage.unwrap(); + }; + + /** + * Operators to calculate right-to-left and left-to-right. + * @protected + * @param {Number} [a] - The left side operand. + * @param {String} [o] - The operator. + * @param {Number} [b] - The right side operand. + */ + Owl.prototype.op = function(a, o, b) { + var rtl = this.settings.rtl; + switch (o) { + case '<': + return rtl ? a > b : a < b; + case '>': + return rtl ? a < b : a > b; + case '>=': + return rtl ? a <= b : a >= b; + case '<=': + return rtl ? a >= b : a <= b; + default: + break; + } + }; + + /** + * Attaches to an internal event. + * @protected + * @param {HTMLElement} element - The event source. + * @param {String} event - The event name. + * @param {Function} listener - The event handler to attach. + * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not. + */ + Owl.prototype.on = function(element, event, listener, capture) { + if (element.addEventListener) { + element.addEventListener(event, listener, capture); + } else if (element.attachEvent) { + element.attachEvent('on' + event, listener); + } + }; + + /** + * Detaches from an internal event. + * @protected + * @param {HTMLElement} element - The event source. + * @param {String} event - The event name. + * @param {Function} listener - The attached event handler to detach. + * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not. + */ + Owl.prototype.off = function(element, event, listener, capture) { + if (element.removeEventListener) { + element.removeEventListener(event, listener, capture); + } else if (element.detachEvent) { + element.detachEvent('on' + event, listener); + } + }; + + /** + * Triggers an public event. + * @protected + * @param {String} name - The event name. + * @param {*} [data=null] - The event data. + * @param {String} [namespace=.owl.carousel] - The event namespace. + * @returns {Event} - The event arguments. + */ + Owl.prototype.trigger = function(name, data, namespace) { + var status = { + item: { count: this._items.length, index: this.current() } + }, handler = $.camelCase( + $.grep([ 'on', name, namespace ], function(v) { return v }) + .join('-').toLowerCase() + ), event = $.Event( + [ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(), + $.extend({ relatedTarget: this }, status, data) + ); + + if (!this._supress[name]) { + $.each(this._plugins, function(name, plugin) { + if (plugin.onTrigger) { + plugin.onTrigger(event); + } + }); + + this.$element.trigger(event); + + if (this.settings && typeof this.settings[handler] === 'function') { + this.settings[handler].apply(this, event); + } + } + + return event; + }; + + /** + * Suppresses events. + * @protected + * @param {Array.} events - The events to suppress. + */ + Owl.prototype.suppress = function(events) { + $.each(events, $.proxy(function(index, event) { + this._supress[event] = true; + }, this)); + } + + /** + * Releases suppressed events. + * @protected + * @param {Array.} events - The events to release. + */ + Owl.prototype.release = function(events) { + $.each(events, $.proxy(function(index, event) { + delete this._supress[event]; + }, this)); + } + + /** + * Checks the availability of some browser features. + * @protected + */ + Owl.prototype.browserSupport = function() { + this.support3d = isPerspective(); + + if (this.support3d) { + this.transformVendor = isTransform(); + + // take transitionend event name by detecting transition + var endVendors = [ 'transitionend', 'webkitTransitionEnd', 'transitionend', 'oTransitionEnd' ]; + this.transitionEndVendor = endVendors[isTransition()]; + + // take vendor name from transform name + this.vendorName = this.transformVendor.replace(/Transform/i, ''); + this.vendorName = this.vendorName !== '' ? '-' + this.vendorName.toLowerCase() + '-' : ''; + } + + this.state.orientation = window.orientation; + }; + + /** + * Get touch/drag coordinats. + * @private + * @param {event} - mousedown/touchstart event + * @returns {object} - Contains X and Y of current mouse/touch position + */ + + function getTouches(event) { + if (event.touches !== undefined) { + return { + x: event.touches[0].pageX, + y: event.touches[0].pageY + }; + } + + if (event.touches === undefined) { + if (event.pageX !== undefined) { + return { + x: event.pageX, + y: event.pageY + }; + } + + if (event.pageX === undefined) { + return { + x: event.clientX, + y: event.clientY + }; + } + } + } + + /** + * Checks for CSS support. + * @private + * @param {Array} array - The CSS properties to check for. + * @returns {Array} - Contains the supported CSS property name and its index or `false`. + */ + function isStyleSupported(array) { + var p, s, fake = document.createElement('div'), list = array; + for (p in list) { + s = list[p]; + if (typeof fake.style[s] !== 'undefined') { + fake = null; + return [ s, p ]; + } + } + return [ false ]; + } + + /** + * Checks for CSS transition support. + * @private + * @todo Realy bad design + * @returns {Number} + */ + function isTransition() { + return isStyleSupported([ 'transition', 'WebkitTransition', 'MozTransition', 'OTransition' ])[1]; + } + + /** + * Checks for CSS transform support. + * @private + * @returns {String} The supported property name or false. + */ + function isTransform() { + return isStyleSupported([ 'transform', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform' ])[0]; + } + + /** + * Checks for CSS perspective support. + * @private + * @returns {String} The supported property name or false. + */ + function isPerspective() { + return isStyleSupported([ 'perspective', 'webkitPerspective', 'MozPerspective', 'OPerspective', 'MsPerspective' ])[0]; + } + + /** + * Checks wether touch is supported or not. + * @private + * @returns {Boolean} + */ + function isTouchSupport() { + return 'ontouchstart' in window || !!(navigator.msMaxTouchPoints); + } + + /** + * Checks wether touch is supported or not for IE. + * @private + * @returns {Boolean} + */ + function isTouchSupportIE() { + return window.navigator.msPointerEnabled; + } + + /** + * The jQuery Plugin for the Owl Carousel + * @public + */ + $.fn.owlCarousel = function(options) { + return this.each(function() { + if (!$(this).data('owlCarousel')) { + $(this).data('owlCarousel', new Owl(this, options)); + } + }); + }; + + /** + * The constructor for the jQuery Plugin + * @public + */ + $.fn.owlCarousel.Constructor = Owl; + +})(window.Zepto || window.jQuery, window, document); + +/** + * Lazy Plugin + * @version 2.0.0 + * @author Bartosz Wojciechowski + * @license The MIT License (MIT) + */ +;(function($, window, document, undefined) { + + /** + * Creates the lazy plugin. + * @class The Lazy Plugin + * @param {Owl} carousel - The Owl Carousel + */ + var Lazy = function(carousel) { + + /** + * Reference to the core. + * @protected + * @type {Owl} + */ + this._core = carousel; + + /** + * Already loaded items. + * @protected + * @type {Array.} + */ + this._loaded = []; + + /** + * Event handlers. + * @protected + * @type {Object} + */ + this._handlers = { + 'initialized.owl.carousel change.owl.carousel': $.proxy(function(e) { + if (!e.namespace) { + return; + } + + if (!this._core.settings || !this._core.settings.lazyLoad) { + return; + } + + if ((e.property && e.property.name == 'position') || e.type == 'initialized') { + var settings = this._core.settings, + n = (settings.center && Math.ceil(settings.items / 2) || settings.items), + i = ((settings.center && n * -1) || 0), + position = ((e.property && e.property.value) || this._core.current()) + i, + clones = this._core.clones().length, + load = $.proxy(function(i, v) { this.load(v) }, this); + + while (i++ < n) { + this.load(clones / 2 + this._core.relative(position)); + clones && $.each(this._core.clones(this._core.relative(position++)), load); + } + } + }, this) + }; + + // set the default options + this._core.options = $.extend({}, Lazy.Defaults, this._core.options); + + // register event handler + this._core.$element.on(this._handlers); + } + + /** + * Default options. + * @public + */ + Lazy.Defaults = { + lazyLoad: false + } + + /** + * Loads all resources of an item at the specified position. + * @param {Number} position - The absolute position of the item. + * @protected + */ + Lazy.prototype.load = function(position) { + var $item = this._core.$stage.children().eq(position), + $elements = $item && $item.find('.owl-lazy'); + + if (!$elements || $.inArray($item.get(0), this._loaded) > -1) { + return; + } + + $elements.each($.proxy(function(index, element) { + var $element = $(element), image, + url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src'); + + this._core.trigger('load', { element: $element, url: url }, 'lazy'); + + if ($element.is('img')) { + $element.one('load.owl.lazy', $.proxy(function() { + $element.css('opacity', 1); + this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); + }, this)).attr('src', url); + } else { + image = new Image(); + image.onload = $.proxy(function() { + $element.css({ + 'background-image': 'url(' + url + ')', + 'opacity': '1' + }); + this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); + }, this); + image.src = url; + } + }, this)); + + this._loaded.push($item.get(0)); + } + + /** + * Destroys the plugin. + * @public + */ + Lazy.prototype.destroy = function() { + var handler, property; + + for (handler in this.handlers) { + this._core.$element.off(handler, this.handlers[handler]); + } + for (property in Object.getOwnPropertyNames(this)) { + typeof this[property] != 'function' && (this[property] = null); + } + } + + $.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy; + +})(window.Zepto || window.jQuery, window, document); + +/** + * AutoHeight Plugin + * @version 2.0.0 + * @author Bartosz Wojciechowski + * @license The MIT License (MIT) + */ +;(function($, window, document, undefined) { + + /** + * Creates the auto height plugin. + * @class The Auto Height Plugin + * @param {Owl} carousel - The Owl Carousel + */ + var AutoHeight = function(carousel) { + /** + * Reference to the core. + * @protected + * @type {Owl} + */ + this._core = carousel; + + /** + * All event handlers. + * @protected + * @type {Object} + */ + this._handlers = { + 'initialized.owl.carousel': $.proxy(function() { + if (this._core.settings.autoHeight) { + this.update(); + } + }, this), + 'changed.owl.carousel': $.proxy(function(e) { + if (this._core.settings.autoHeight && e.property.name == 'position'){ + this.update(); + } + }, this), + 'loaded.owl.lazy': $.proxy(function(e) { + if (this._core.settings.autoHeight && e.element.closest('.' + this._core.settings.itemClass) + === this._core.$stage.children().eq(this._core.current())) { + this.update(); + } + }, this) + }; + + // set default options + this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options); + + // register event handlers + this._core.$element.on(this._handlers); + }; + + /** + * Default options. + * @public + */ + AutoHeight.Defaults = { + autoHeight: false, + autoHeightClass: 'owl-height' + }; + + /** + * Updates the view. + */ + AutoHeight.prototype.update = function() { + this._core.$stage.parent() + .height(this._core.$stage.children().eq(this._core.current()).height()) + .addClass(this._core.settings.autoHeightClass); + }; + + AutoHeight.prototype.destroy = function() { + var handler, property; + + for (handler in this._handlers) { + this._core.$element.off(handler, this._handlers[handler]); + } + for (property in Object.getOwnPropertyNames(this)) { + typeof this[property] != 'function' && (this[property] = null); + } + }; + + $.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight; + +})(window.Zepto || window.jQuery, window, document); + +/** + * Video Plugin + * @version 2.0.0 + * @author Bartosz Wojciechowski + * @license The MIT License (MIT) + */ +;(function($, window, document, undefined) { + + /** + * Creates the video plugin. + * @class The Video Plugin + * @param {Owl} carousel - The Owl Carousel + */ + var Video = function(carousel) { + /** + * Reference to the core. + * @protected + * @type {Owl} + */ + this._core = carousel; + + /** + * Cache all video URLs. + * @protected + * @type {Object} + */ + this._videos = {}; + + /** + * Current playing item. + * @protected + * @type {jQuery} + */ + this._playing = null; + + /** + * Whether this is in fullscreen or not. + * @protected + * @type {Boolean} + */ + this._fullscreen = false; + + /** + * All event handlers. + * @protected + * @type {Object} + */ + this._handlers = { + 'resize.owl.carousel': $.proxy(function(e) { + if (this._core.settings.video && !this.isInFullScreen()) { + e.preventDefault(); + } + }, this), + 'refresh.owl.carousel changed.owl.carousel': $.proxy(function(e) { + if (this._playing) { + this.stop(); + } + }, this), + 'prepared.owl.carousel': $.proxy(function(e) { + var $element = $(e.content).find('.owl-video'); + if ($element.length) { + $element.css('display', 'none'); + this.fetch($element, $(e.content)); + } + }, this) + }; + + // set default options + this._core.options = $.extend({}, Video.Defaults, this._core.options); + + // register event handlers + this._core.$element.on(this._handlers); + + this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) { + this.play(e); + }, this)); + }; + + /** + * Default options. + * @public + */ + Video.Defaults = { + video: false, + videoHeight: false, + videoWidth: false + }; + + /** + * Gets the video ID and the type (YouTube/Vimeo only). + * @protected + * @param {jQuery} target - The target containing the video data. + * @param {jQuery} item - The item containing the video. + */ + Video.prototype.fetch = function(target, item) { + + var type = target.attr('data-vimeo-id') ? 'vimeo' : 'youtube', + id = target.attr('data-vimeo-id') || target.attr('data-youtube-id'), + width = target.attr('data-width') || this._core.settings.videoWidth, + height = target.attr('data-height') || this._core.settings.videoHeight, + url = target.attr('href'); + + if (url) { + id = url.match(/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/); + + if (id[3].indexOf('youtu') > -1) { + type = 'youtube'; + } else if (id[3].indexOf('vimeo') > -1) { + type = 'vimeo'; + } else { + throw new Error('Video URL not supported.'); + } + id = id[6]; + } else { + throw new Error('Missing video URL.'); + } + + this._videos[url] = { + type: type, + id: id, + width: width, + height: height + }; + + item.attr('data-video', url); + + this.thumbnail(target, this._videos[url]); + }; + + /** + * Creates video thumbnail. + * @protected + * @param {jQuery} target - The target containing the video data. + * @param {Object} info - The video info object. + * @see `fetch` + */ + Video.prototype.thumbnail = function(target, video) { + + var tnLink, + icon, + path, + dimensions = video.width && video.height ? 'style="width:' + video.width + 'px;height:' + video.height + 'px;"' : '', + customTn = target.find('img'), + srcType = 'src', + lazyClass = '', + settings = this._core.settings, + create = function(path) { + icon = '
    '; + + if (settings.lazyLoad) { + tnLink = '
    '; + } else { + tnLink = '
    '; + } + target.after(tnLink); + target.after(icon); + }; + + // wrap video content into owl-video-wrapper div + target.wrap('
    '); + + if (this._core.settings.lazyLoad) { + srcType = 'data-src'; + lazyClass = 'owl-lazy'; + } + + // custom thumbnail + if (customTn.length) { + create(customTn.attr(srcType)); + customTn.remove(); + return false; + } + + if (video.type === 'youtube') { + path = "http://img.youtube.com/vi/" + video.id + "/hqdefault.jpg"; + create(path); + } else if (video.type === 'vimeo') { + $.ajax({ + type: 'GET', + url: 'http://vimeo.com/api/v2/video/' + video.id + '.json', + jsonp: 'callback', + dataType: 'jsonp', + success: function(data) { + path = data[0].thumbnail_large; + create(path); + } + }); + } + }; + + /** + * Stops the current video. + * @public + */ + Video.prototype.stop = function() { + this._core.trigger('stop', null, 'video'); + this._playing.find('.owl-video-frame').remove(); + this._playing.removeClass('owl-video-playing'); + this._playing = null; + }; + + /** + * Starts the current video. + * @public + * @param {Event} ev - The event arguments. + */ + Video.prototype.play = function(ev) { + this._core.trigger('play', null, 'video'); + + if (this._playing) { + this.stop(); + } + + var target = $(ev.target || ev.srcElement), + item = target.closest('.' + this._core.settings.itemClass), + video = this._videos[item.attr('data-video')], + width = video.width || '100%', + height = video.height || this._core.$stage.height(), + html, wrap; + + if (video.type === 'youtube') { + html = ''; + } else if (video.type === 'vimeo') { + html = ''; + } + + item.addClass('owl-video-playing'); + this._playing = item; + + wrap = $('
    ' + + html + '
    '); + target.after(wrap); + }; + + /** + * Checks whether an video is currently in full screen mode or not. + * @todo Bad style because looks like a readonly method but changes members. + * @protected + * @returns {Boolean} + */ + Video.prototype.isInFullScreen = function() { + + // if Vimeo Fullscreen mode + var element = document.fullscreenElement || document.mozFullScreenElement + || document.webkitFullscreenElement; + + if (element && $(element).parent().hasClass('owl-video-frame')) { + this._core.speed(0); + this._fullscreen = true; + } + + if (element && this._fullscreen && this._playing) { + return false; + } + + // comming back from fullscreen + if (this._fullscreen) { + this._fullscreen = false; + return false; + } + + // check full screen mode and window orientation + if (this._playing) { + if (this._core.state.orientation !== window.orientation) { + this._core.state.orientation = window.orientation; + return false; + } + } + + return true; + }; + + /** + * Destroys the plugin. + */ + Video.prototype.destroy = function() { + var handler, property; + + this._core.$element.off('click.owl.video'); + + for (handler in this._handlers) { + this._core.$element.off(handler, this._handlers[handler]); + } + for (property in Object.getOwnPropertyNames(this)) { + typeof this[property] != 'function' && (this[property] = null); + } + }; + + $.fn.owlCarousel.Constructor.Plugins.Video = Video; + +})(window.Zepto || window.jQuery, window, document); + +/** + * Animate Plugin + * @version 2.0.0 + * @author Bartosz Wojciechowski + * @license The MIT License (MIT) + */ +;(function($, window, document, undefined) { + + /** + * Creates the animate plugin. + * @class The Navigation Plugin + * @param {Owl} scope - The Owl Carousel + */ + var Animate = function(scope) { + this.core = scope; + this.core.options = $.extend({}, Animate.Defaults, this.core.options); + this.swapping = true; + this.previous = undefined; + this.next = undefined; + + this.handlers = { + 'change.owl.carousel': $.proxy(function(e) { + if (e.property.name == 'position') { + this.previous = this.core.current(); + this.next = e.property.value; + } + }, this), + 'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) { + this.swapping = e.type == 'translated'; + }, this), + 'translate.owl.carousel': $.proxy(function(e) { + if (this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) { + this.swap(); + } + }, this) + }; + + this.core.$element.on(this.handlers); + }; + + /** + * Default options. + * @public + */ + Animate.Defaults = { + animateOut: false, + animateIn: false + }; + + /** + * Toggles the animation classes whenever an translations starts. + * @protected + * @returns {Boolean|undefined} + */ + Animate.prototype.swap = function() { + + if (this.core.settings.items !== 1 || !this.core.support3d) { + return; + } + + this.core.speed(0); + + var left, + clear = $.proxy(this.clear, this), + previous = this.core.$stage.children().eq(this.previous), + next = this.core.$stage.children().eq(this.next), + incoming = this.core.settings.animateIn, + outgoing = this.core.settings.animateOut; + + if (this.core.current() === this.previous) { + return; + } + + if (outgoing) { + left = this.core.coordinates(this.previous) - this.core.coordinates(this.next); + previous.css( { 'left': left + 'px' } ) + .addClass('animated owl-animated-out') + .addClass(outgoing) + .one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', clear); + } + + if (incoming) { + next.addClass('animated owl-animated-in') + .addClass(incoming) + .one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', clear); + } + }; + + Animate.prototype.clear = function(e) { + $(e.target).css( { 'left': '' } ) + .removeClass('animated owl-animated-out owl-animated-in') + .removeClass(this.core.settings.animateIn) + .removeClass(this.core.settings.animateOut); + this.core.transitionEnd(); + } + + /** + * Destroys the plugin. + * @public + */ + Animate.prototype.destroy = function() { + var handler, property; + + for (handler in this.handlers) { + this.core.$element.off(handler, this.handlers[handler]); + } + for (property in Object.getOwnPropertyNames(this)) { + typeof this[property] != 'function' && (this[property] = null); + } + }; + + $.fn.owlCarousel.Constructor.Plugins.Animate = Animate; + +})(window.Zepto || window.jQuery, window, document); + +/** + * Autoplay Plugin + * @version 2.0.0 + * @author Bartosz Wojciechowski + * @license The MIT License (MIT) + */ +;(function($, window, document, undefined) { + + /** + * Creates the autoplay plugin. + * @class The Autoplay Plugin + * @param {Owl} scope - The Owl Carousel + */ + var Autoplay = function(scope) { + this.core = scope; + this.core.options = $.extend({}, Autoplay.Defaults, this.core.options); + + this.handlers = { + 'translated.owl.carousel refreshed.owl.carousel': $.proxy(function() { + this.autoplay(); + }, this), + 'play.owl.autoplay': $.proxy(function(e, t, s) { + this.play(t, s); + }, this), + 'stop.owl.autoplay': $.proxy(function() { + this.stop(); + }, this), + 'mouseover.owl.autoplay': $.proxy(function() { + if (this.core.settings.autoplayHoverPause) { + this.pause(); + } + }, this), + 'mouseleave.owl.autoplay': $.proxy(function() { + if (this.core.settings.autoplayHoverPause) { + this.autoplay(); + } + }, this) + }; + + this.core.$element.on(this.handlers); + }; + + /** + * Default options. + * @public + */ + Autoplay.Defaults = { + autoplay: false, + autoplayTimeout: 5000, + autoplayHoverPause: false, + autoplaySpeed: false + }; + + /** + * @protected + * @todo Must be documented. + */ + Autoplay.prototype.autoplay = function() { + if (this.core.settings.autoplay && !this.core.state.videoPlay) { + window.clearInterval(this.interval); + + this.interval = window.setInterval($.proxy(function() { + this.play(); + }, this), this.core.settings.autoplayTimeout); + } else { + window.clearInterval(this.interval); + } + }; + + /** + * Starts the autoplay. + * @public + * @param {Number} [timeout] - ... + * @param {Number} [speed] - ... + * @returns {Boolean|undefined} - ... + * @todo Must be documented. + */ + Autoplay.prototype.play = function(timeout, speed) { + // if tab is inactive - doesnt work in } + */ + this._templates = []; + + /** + * The carousel element. + * @type {jQuery} + */ + this.$element = this._core.$element; + + /** + * Overridden methods of the carousel. + * @protected + * @type {Object} + */ + this._overrides = { + next: this._core.next, + prev: this._core.prev, + to: this._core.to + }; + + /** + * All event handlers. + * @protected + * @type {Object} + */ + this._handlers = { + 'prepared.owl.carousel': $.proxy(function(e) { + if (this._core.settings.dotsData) { + this._templates.push($(e.content).find('[data-dot]').andSelf('[data-dot]').attr('data-dot')); + } + }, this), + 'add.owl.carousel': $.proxy(function(e) { + if (this._core.settings.dotsData) { + this._templates.splice(e.position, 0, $(e.content).find('[data-dot]').andSelf('[data-dot]').attr('data-dot')); + } + }, this), + 'remove.owl.carousel prepared.owl.carousel': $.proxy(function(e) { + if (this._core.settings.dotsData) { + this._templates.splice(e.position, 1); + } + }, this), + 'change.owl.carousel': $.proxy(function(e) { + if (e.property.name == 'position') { + if (!this._core.state.revert && !this._core.settings.loop && this._core.settings.navRewind) { + var current = this._core.current(), + maximum = this._core.maximum(), + minimum = this._core.minimum(); + e.data = e.property.value > maximum + ? current >= maximum ? minimum : maximum + : e.property.value < minimum ? maximum : e.property.value; + } + } + }, this), + 'changed.owl.carousel': $.proxy(function(e) { + if (e.property.name == 'position') { + this.draw(); + } + }, this), + 'refreshed.owl.carousel': $.proxy(function() { + if (!this._initialized) { + this.initialize(); + this._initialized = true; + } + this._core.trigger('refresh', null, 'navigation'); + this.update(); + this.draw(); + this._core.trigger('refreshed', null, 'navigation'); + }, this) + }; + + // set default options + this._core.options = $.extend({}, Navigation.Defaults, this._core.options); + + // register event handlers + this.$element.on(this._handlers); + } + + /** + * Default options. + * @public + * @todo Rename `slideBy` to `navBy` + */ + Navigation.Defaults = { + nav: false, + navRewind: true, + navText: [ 'prev', 'next' ], + navSpeed: false, + navElement: 'div', + navContainer: false, + navContainerClass: 'owl-nav', + navClass: [ 'owl-prev', 'owl-next' ], + slideBy: 1, + dotClass: 'owl-dot', + dotsClass: 'owl-dots', + dots: true, + dotsEach: false, + dotData: false, + dotsSpeed: false, + dotsContainer: false, + controlsClass: 'owl-controls' + } + + /** + * Initializes the layout of the plugin and extends the carousel. + * @protected + */ + Navigation.prototype.initialize = function() { + var $container, override, + options = this._core.settings; + + // create the indicator template + if (!options.dotsData) { + this._templates = [ $('
    ') + .addClass(options.dotClass) + .append($('')) + .prop('outerHTML') ]; + } + + // create controls container if needed + if (!options.navContainer || !options.dotsContainer) { + this._controls.$container = $('
    ') + .addClass(options.controlsClass) + .appendTo(this.$element); + } + + // create DOM structure for absolute navigation + this._controls.$indicators = options.dotsContainer ? $(options.dotsContainer) + : $('
    ').hide().addClass(options.dotsClass).appendTo(this._controls.$container); + + this._controls.$indicators.on('click', 'div', $.proxy(function(e) { + var index = $(e.target).parent().is(this._controls.$indicators) + ? $(e.target).index() : $(e.target).parent().index(); + + e.preventDefault(); + + this.to(index, options.dotsSpeed); + }, this)); + + // create DOM structure for relative navigation + $container = options.navContainer ? $(options.navContainer) + : $('
    ').addClass(options.navContainerClass).prependTo(this._controls.$container); + + this._controls.$next = $('<' + options.navElement + '>'); + this._controls.$previous = this._controls.$next.clone(); + + this._controls.$previous + .addClass(options.navClass[0]) + .html(options.navText[0]) + .hide() + .prependTo($container) + .on('click', $.proxy(function(e) { + this.prev(options.navSpeed); + }, this)); + this._controls.$next + .addClass(options.navClass[1]) + .html(options.navText[1]) + .hide() + .appendTo($container) + .on('click', $.proxy(function(e) { + this.next(options.navSpeed); + }, this)); + + // override public methods of the carousel + for (override in this._overrides) { + this._core[override] = $.proxy(this[override], this); + } + } + + /** + * Destroys the plugin. + * @protected + */ + Navigation.prototype.destroy = function() { + var handler, control, property, override; + + for (handler in this._handlers) { + this.$element.off(handler, this._handlers[handler]); + } + for (control in this._controls) { + this._controls[control].remove(); + } + for (override in this.overides) { + this._core[override] = this._overrides[override]; + } + for (property in Object.getOwnPropertyNames(this)) { + typeof this[property] != 'function' && (this[property] = null); + } + } + + /** + * Updates the internal state. + * @protected + */ + Navigation.prototype.update = function() { + var i, j, k, + options = this._core.settings, + lower = this._core.clones().length / 2, + upper = lower + this._core.items().length, + size = options.center || options.autoWidth || options.dotData + ? 1 : options.dotsEach || options.items; + + if (options.slideBy !== 'page') { + options.slideBy = Math.min(options.slideBy, options.items); + } + + if (options.dots || options.slideBy == 'page') { + this._pages = []; + + for (i = lower, j = 0, k = 0; i < upper; i++) { + if (j >= size || j === 0) { + this._pages.push({ + start: i - lower, + end: i - lower + size - 1 + }); + j = 0, ++k; + } + j += this._core.mergers(this._core.relative(i)); + } + } + } + + /** + * Draws the user interface. + * @todo The option `dotData` wont work. + * @protected + */ + Navigation.prototype.draw = function() { + var difference, i, html = '', + options = this._core.settings, + $items = this._core.$stage.children(), + index = this._core.relative(this._core.current()); + + if (options.nav && !options.loop && !options.navRewind) { + this._controls.$previous.toggleClass('disabled', index <= 0); + this._controls.$next.toggleClass('disabled', index >= this._core.maximum()); + } + + this._controls.$previous.toggle(options.nav); + this._controls.$next.toggle(options.nav); + + if (options.dots) { + difference = this._pages.length - this._controls.$indicators.children().length; + + if (options.dotData && difference !== 0) { + for (i = 0; i < this._controls.$indicators.children().length; i++) { + html += this._templates[this._core.relative(i)]; + } + this._controls.$indicators.html(html); + } else if (difference > 0) { + html = new Array(difference + 1).join(this._templates[0]); + this._controls.$indicators.append(html); + } else if (difference < 0) { + this._controls.$indicators.children().slice(difference).remove(); + } + + this._controls.$indicators.find('.active').removeClass('active'); + this._controls.$indicators.children().eq($.inArray(this.current(), this._pages)).addClass('active'); + } + + this._controls.$indicators.toggle(options.dots); + } + + /** + * Extends event data. + * @protected + * @param {Event} event - The event object which gets thrown. + */ + Navigation.prototype.onTrigger = function(event) { + var settings = this._core.settings; + + event.page = { + index: $.inArray(this.current(), this._pages), + count: this._pages.length, + size: settings && (settings.center || settings.autoWidth || settings.dotData + ? 1 : settings.dotsEach || settings.items) + }; + } + + /** + * Gets the current page position of the carousel. + * @protected + * @returns {Number} + */ + Navigation.prototype.current = function() { + var index = this._core.relative(this._core.current()); + return $.grep(this._pages, function(o) { + return o.start <= index && o.end >= index; + }).pop(); + } + + /** + * Gets the current succesor/predecessor position. + * @protected + * @returns {Number} + */ + Navigation.prototype.getPosition = function(successor) { + var position, length, + options = this._core.settings; + + if (options.slideBy == 'page') { + position = $.inArray(this.current(), this._pages); + length = this._pages.length; + successor ? ++position : --position; + position = this._pages[((position % length) + length) % length].start; + } else { + position = this._core.relative(this._core.current()); + length = this._core.items().length; + successor ? position += options.slideBy : position -= options.slideBy; + } + return position; + } + + /** + * Slides to the next item or page. + * @public + * @param {Number} [speed=false] - The time in milliseconds for the transition. + */ + Navigation.prototype.next = function(speed) { + $.proxy(this._overrides.to, this._core)(this.getPosition(true), speed); + } + + /** + * Slides to the previous item or page. + * @public + * @param {Number} [speed=false] - The time in milliseconds for the transition. + */ + Navigation.prototype.prev = function(speed) { + $.proxy(this._overrides.to, this._core)(this.getPosition(false), speed); + } + + /** + * Slides to the specified item or page. + * @public + * @param {Number} position - The position of the item or page. + * @param {Number} [speed] - The time in milliseconds for the transition. + * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not. + */ + Navigation.prototype.to = function(position, speed, standard) { + var length; + + if (!standard) { + length = this._pages.length; + $.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed); + } else { + $.proxy(this._overrides.to, this._core)(position, speed); + } + } + + $.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation; + +})(window.Zepto || window.jQuery, window, document); + +/** + * Hash Plugin + * @version 2.0.0 + * @author Artus Kolanowski + * @license The MIT License (MIT) + */ +;(function($, window, document, undefined) { + 'use strict'; + + /** + * Creates the hash plugin. + * @class The Hash Plugin + * @param {Owl} carousel - The Owl Carousel + */ + var Hash = function(carousel) { + /** + * Reference to the core. + * @protected + * @type {Owl} + */ + this._core = carousel; + + /** + * Hash table for the hashes. + * @protected + * @type {Object} + */ + this._hashes = {}; + + /** + * The carousel element. + * @type {jQuery} + */ + this.$element = this._core.$element; + + /** + * All event handlers. + * @protected + * @type {Object} + */ + this._handlers = { + 'initialized.owl.carousel': $.proxy(function() { + if (this._core.settings.startPosition == 'URLHash') { + $(window).trigger('hashchange.owl.navigation'); + } + }, this), + 'prepared.owl.carousel': $.proxy(function(e) { + var hash = $(e.content).find('[data-hash]').andSelf('[data-hash]').attr('data-hash'); + this._hashes[hash] = e.content; + }, this) + }; + + // set default options + this._core.options = $.extend({}, Hash.Defaults, this._core.options); + + // register the event handlers + this.$element.on(this._handlers); + + // register event listener for hash navigation + $(window).on('hashchange.owl.navigation', $.proxy(function() { + var hash = window.location.hash.substring(1), + items = this._core.$stage.children(), + position = this._hashes[hash] && items.index(this._hashes[hash]) || 0; + + if (!hash) { + return false; + } + + this._core.to(position, false, true); + }, this)); + } + + /** + * Default options. + * @public + */ + Hash.Defaults = { + URLhashListener: false + } + + /** + * Destroys the plugin. + * @public + */ + Hash.prototype.destroy = function() { + var handler, property; + + $(window).off('hashchange.owl.navigation'); + + for (handler in this._handlers) { + this._core.$element.off(handler, this._handlers[handler]); + } + for (property in Object.getOwnPropertyNames(this)) { + typeof this[property] != 'function' && (this[property] = null); + } + } + + $.fn.owlCarousel.Constructor.Plugins.Hash = Hash; + +})(window.Zepto || window.jQuery, window, document); diff --git a/frontend/web/js/script.js b/frontend/web/js/script.js new file mode 100755 index 0000000..8245674 --- /dev/null +++ b/frontend/web/js/script.js @@ -0,0 +1,244 @@ +var artbox_basket = new ArtboxBasket(); + +/*order basket form js logic*/ + +var recountPrice = function(container,new_value){ + var new_price = +$(container).find('.price span').html() * new_value; + $(container).find('.cost span').html(new_price.toFixed(2)); + var total_price = 0; + $('#ordersFrom').find('#cost span').each(function(){ + total_price += +$(this).html(); + }); + + var total = $('#total span').html(total_price.toFixed(2)); +}; + +$(document).on('click', '#ordersFrom .count_choise .plus', function(e) { + e.preventDefault(); + var container = $(this).parents('.order_item'); + var input = $(container).find('.prod_count'); + var value = $(input).val(); + var new_value = parseInt(value) + 1; + $(input).val(new_value); + $(input).trigger('change'); + recountPrice(container,new_value); + +}); + +$(document).on('click', '#ordersFrom .count_choise .minus', function(e) { + e.preventDefault(); + var container = $(this).parents('.order_item'); + var input = $(container).find('.prod_count'); + var value = $(input).val(); + if(value > 1 ){ + var new_value = parseInt(value) - 1; + $(input).val(new_value); + $(input).trigger('change'); + recountPrice(container,new_value); + } + +}); + +$(document).on('change', '#ordersFrom .prod_count', function(e) { + e.preventDefault(); + var container = $(this).parents('.order_item'); + var new_value = $(this).val(); + recountPrice(container,new_value); + var product_variant_id = container.data('id'); + var value = $(this).val(); + if(value < 0) { + value = 0; + } + artbox_basket.set(product_variant_id, value); +}); + + + +$(document).on('click', '#ordersFrom .cart_remove', function(e) { + e.preventDefault(); + var container = $(this).parents('.order_item'); + + var id = $(container).data('id'); + container.remove(); + artbox_basket.set(id, 0); +}); + + +/*end order basket form js logic*/ + +$(document).on('click', '.buy_button', function(e) { + e.preventDefault(); + var product_variant_id = $(this).data('id'); + var count = 1; + artbox_basket.add(product_variant_id, count); +}); +$(document).on('change', '#buyForm .prod_count', function(e) { + e.preventDefault(); + var product_variant_id = $(this).parents('tr').data('id'); + var value = $(this).val(); + if(value < 0) { + value = 0; + } + artbox_basket.set(product_variant_id, value); +}); + +$(document).on('click', '#buyForm .count_choise .minus', function(e) { + e.preventDefault(); + var container = $(this).parents('tr'); + var input = $(container).find('.prod_count'); + var value = $(input).val(); + var new_value = parseInt(value) - 1; + $(input).val(new_value); + $(input).trigger('change'); +}); + + +$(document).on('click', '#buyForm .count_choise .plus', function(e) { + e.preventDefault(); + var container = $(this).parents('tr'); + var input = $(container).find('.prod_count'); + var value = $(input).val(); + var new_value = parseInt(value) + 1; + $(input).val(new_value); + $(input).trigger('change'); +}); + +$(document).on('click', '#buyForm .cart_remove', function() { + var container = $(this).parents('tr'); + var id = $(container).data('id'); + artbox_basket.set(id, 0); +}); + +/* Category filter open submenu */ +$(document).on('click', '.block_title', function(e) { + var active = $(this).parent().hasClass('opened'); + if(active) { + $(this).parent().removeClass('opened').addClass('closed'); + $(this).parent().find('.chechboxes').hide(); + } else { + $(this).parent().removeClass('closed').addClass('opened'); + $(this).parent().find('.chechboxes').show(); + } +}); +/* End Category filter open submenu */ +/* Cart resize on scroll */ +$('.img_part').height($('.info').height()); +$(document).on('scroll', window, function(e) +{ + currentScroll = $(window).scrollTop(); + if (currentScroll > 0) { + $('#top-cart-content').addClass('small-cart'); + } else { + $('#top-cart-content').removeClass('small-cart'); + } +}); +/* End cart resize on scroll */ +/* Catalog product scroll watcher */ +$(document).on('scroll', window, function(e) { + if(($('.detail_main_tabs').length)>0) { + checkFixed(e); + checkSelector(e); + } + +}); +function checkFixed(e) { + var img_part = $('.img_part'); + var position = $(img_part).find('.position'); + var position_height = $(position).height(); + var info = $('.info'); + var info_position = $(info).position(); + var info_height = $(info).height(); + var info_top = info_position.top; + var info_bottom = info_top + info_height; + var currentScroll = $(window).scrollTop(); + if(info_bottom - currentScroll > 0 && info_bottom - currentScroll < position_height) { + $(position).removeClass('fixed').css({ + position: 'absolute', + bottom: 0, + top: 'auto', + }); + } else if(currentScroll > info_top && currentScroll < info_bottom) { + $(position).addClass('fixed').css({ + position: 'fixed', + top: '100px', + bottom: 'auto' + }); + } else { + $(position).removeClass('fixed').css({ + position: 'relative', + top: '50px', + bottom: 'auto' + }); + } +} +function checkSelector(e) { + var tab_content = $('#characteristics'); + var tab_content_top = $(tab_content).position().top - 100; + var comments_block = $('#reviews'); + var comments_block_top = $(comments_block).position().top - 100; + var collection = $('#collection'); + var collection_top = $(collection).position().top - 100; + var currentScroll = $(window).scrollTop(); + var detail_main_tabs = $('.detail_main_tabs'); + var active; + if(currentScroll > tab_content_top && currentScroll < collection_top) { + active = 'characteristics'; + } else if(currentScroll > comments_block_top) { + active = 'reviews'; + } else if(currentScroll > collection_top && currentScroll < comments_block_top) { + active = 'collection'; + } + $(detail_main_tabs).find('li.selected').removeClass('selected'); + $(detail_main_tabs).find('[data-target='+active+']').addClass('selected'); +} +$(window).scroll(function(e) { + // checkFixed(e); + // checkSelector(e); +}); +/* End catalog product scroll watcher */ +/* Animated links */ +$(document).on('click', '.detail_main_tabs a', function(e) { + e.preventDefault(); + var hash = $(this).attr('href').replace(/^.*?(#|$)/,''); + var target = $('#'+hash); + var target_top = $(target).position().top - 50; + var body = $('html, body'); + body.stop().animate({scrollTop:target_top}, 500, 'swing', function() {}); +}); +/* End animated links */ +/* Ajax form submit */ +$(document).on('submit', '#feedback-form', function(e) { + e.preventDefault(); + $.post('/ajax/feedback', $(this).serialize(), function(data) { + $('#myCallback').find('.modal-body').html(data.result); + }); +}); +$(document).on('submit', '#quickbuy-form', function(e) { + e.preventDefault(); + var container = $(this).parents('.fast_order_form'); + $.post('/order/quick', $(this).serialize(), function(data) { + if(!data.error) { + $(container).html(data.result); + } else { + $(container).html(data.error); + } + }) +}); +$(document).on('submit', '#quickbuy-modal', function(e) +{ + e.preventDefault(); + var form = $('#buyForm'); + $.post('/order/quick-basket', $(this).serialize(), function(data) + { + if(!data.error) { + $(form).find('.modal-body').html(data.result); + } else { + $(form).find('.modal-body').html(data.error); + } + }).fail(function(jqXHR, textStatus, errorThrown) { + $(form).find('.modal-body').html(JSON.parse(jqXHR.responseText).message); + }); + $(form).find('.modal-title').remove(); + $(form).find('.modal-footer').remove(); +}); +/* End ajax form submit */ \ No newline at end of file diff --git a/frontend/web/robots.txt b/frontend/web/robots.txt new file mode 100755 index 0000000..0a63507 --- /dev/null +++ b/frontend/web/robots.txt @@ -0,0 +1,9 @@ +User-agent: * +Disallow: /order +Disallow: /*search +Disallow: /?sort +Disallow: /*event +Disallow: /?page +Disallow: /? +Host: www.linija-svitla.ua +Sitemap: http://www.linija-svitla.ua/sitemap.xml \ No newline at end of file diff --git a/frontend/web/sitemap.xml b/frontend/web/sitemap.xml new file mode 100644 index 0000000..c7028e5 --- /dev/null +++ b/frontend/web/sitemap.xml @@ -0,0 +1 @@ +http://www.linija-svitla.ua2016-10-28Weekly1http://www.linija-svitla.ua/catalog2016-10-28Weekly1http://www.linija-svitla.ua/text/garantii2016-10-28Weekly1http://www.linija-svitla.ua/text/oplata2016-10-28Weekly1http://www.linija-svitla.ua/text/dostavka-tovarov2016-10-28Weekly1http://www.linija-svitla.ua/text/diskontnaya-programma2016-10-28Weekly1http://www.linija-svitla.ua/text/o-proekte2016-10-28Weekly1http://www.linija-svitla.ua/text/magaziny2016-10-28Weekly1http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/2016-10-28Weekly1http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/2016-10-28Weekly1http://www.linija-svitla.ua/catalog/abazhury-i-plafony/2016-10-28Weekly1http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/2016-10-28Weekly1http://www.linija-svitla.ua/catalog/lampochki/2016-10-28Weekly1http://www.linija-svitla.ua/catalog/detskie-svetilniki/2016-10-28Weekly1http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/2016-10-28Weekly1http://www.linija-svitla.ua/catalog/aksessuary/2016-10-28Weekly1http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/2016-10-28Weekly1http://www.linija-svitla.ua/catalog/nastolnye-lampy/2016-10-28Weekly1http://www.linija-svitla.ua/catalog/torshery/2016-10-28Weekly1http://www.linija-svitla.ua/catalog/tochechnoe/2016-10-28Weekly1http://www.linija-svitla.ua/product/abazhur-elstead-luils10562016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10582016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10592016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10602016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10612016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10622016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10632016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10642016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10652016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10662016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy38-ebony2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy38-ivyt72016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy38-marinet92016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy38-tangosg22016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy38-20112016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy40-creampr82016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy40-ebony2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-creampr82016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-ebony2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-limepr32016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils11042016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils11302016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils11102016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431193117dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kabel-garden-zone-gzcable-set-6m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/perehodnik-garden-zone-gzconnector2016-10-28Weekly0.9http://www.linija-svitla.ua/product/blok-pitaniya-garden-zone-gzdriver-11w2016-10-28Weekly0.9http://www.linija-svitla.ua/product/blok-pitaniya-garden-zone-gzdriver-28w2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzelite-pole-a2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzelite-pole-b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzelite-spike-a2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzelite-spike-b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzroot-a2016-10-28Weekly0.9http://www.linija-svitla.ua/product/shnur-pitaniya-garden-zone-gzcc3-way-plug2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-455761713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3748230132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3748217132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3633730132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-361271713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3612706132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-4555943132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-4555931132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3321517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3670217lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431243017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431243317dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-4312435172016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-4312455172016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431253017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431253517dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431255517dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431163017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431199317dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431209317dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy35-20112016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy35-20152016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy38-20152016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy38-34142016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy38-34372016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy38-74712016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy40-20152016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy40-74512016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-17052016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-20152016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd30-21342016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd30-28672016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd30-34042016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd30-7450m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd30-7450t2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd46-28672016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd46-34042016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd46-74502016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10022016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10032016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10672016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10682016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10722016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10812016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10842016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10862016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10872016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11052016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11062016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11072016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-marinet92016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-steelft92016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-2134d2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-7477d2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr15-creampr82016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr15-21342016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr30-mochat62016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr30-21342016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr35-creampr82016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr40-creampr82016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-elstead-cbkt2-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kabel-philips-6913531ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kabel-philips-6913555ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/adapter-philips-6913631ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/adapter-philips-6913655ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-massive-3346817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/starter-philips-ph-s2-4-22w-ser-220-240v-wh-eur12x25ct2016-10-28Weekly0.9http://www.linija-svitla.ua/product/sprey-massive-6894100102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-3346517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/datchik-dvizheniya-philips-1726630162016-10-28Weekly0.9http://www.linija-svitla.ua/product/kabel-garden-zone-gzcc6m-cable2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzccamble-1s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzccamble-3s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/transformator-garden-zone-gzcctransformer2016-10-28Weekly0.9http://www.linija-svitla.ua/product/rozetka-massive-301891710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3723243132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-370771713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3707786132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3749243132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3721204132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-4555230132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3747786132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3729286132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3745718132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3745786132016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431214317dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431218617dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431223017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431242817dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431249017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431252817dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431253317dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431259017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-4311931172016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10052016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-21292016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-28672016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-34042016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-34142016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-34372016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-34412016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-51462016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-74512016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-74602016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy46-74712016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10042016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10072016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10142016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10152016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10162016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10182016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10192016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10202016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10212016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10232016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11082016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11092016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11112016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11122016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11132016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11152016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11162016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11172016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11182016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11192016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr40-21342016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd30-deft72016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd30-ivorypc62016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd30-silft02016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd30-3404t2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd30-44632016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd46-deft72016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd46-silft02016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqtd46-44632016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10062016-10-28Weekly0.9http://www.linija-svitla.ua/product/datchik-dvizheniya-philips-1726631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/datchik-dvizheniya-philips-1726687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-philips-3346517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/datchik-dvizheniya-light-topps-lt190002016-10-28Weekly0.9http://www.linija-svitla.ua/product/datchik-dvizheniya-light-topps-lt190072016-10-28Weekly0.9http://www.linija-svitla.ua/product/zerkalo-elstead-feargentum-mirr2016-10-28Weekly0.9http://www.linija-svitla.ua/product/zerkalo-elstead-fecarolyn-mirr2016-10-28Weekly0.9http://www.linija-svitla.ua/product/zerkalo-elstead-fecheyenne-mirr2016-10-28Weekly0.9http://www.linija-svitla.ua/product/zerkalo-elstead-fecosmo-mirror2016-10-28Weekly0.9http://www.linija-svitla.ua/product/zerkalo-elstead-fedrawingrm-mir2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-363373113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ov2-ivorygold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-pm2-db2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkbolla12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkcello12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkchandon12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkplant1-pz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ghwb-db2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkplant1-pl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3684733102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3748786132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3743729132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3743786132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3756787132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-6711706132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-671171713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3670217li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10092016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10122016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10302016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10522016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils1112016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils11142016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10892016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-elstead-hqco15-17052016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-elstead-hqco15-20152016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-elstead-hqco15-21292016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr12-17052016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr12-20152016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr12-21292016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr12-28672016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr12-34042016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr12-34142016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr12-34372016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr12-34412016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr12-51462016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr12-74512016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10242016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10282016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10292016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10312016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10322016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10332016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10342016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10352016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10362016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10372016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11202016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11212016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11222016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11232016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11242016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11252016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11262016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11272016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11282016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11292016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10432016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10452016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10502016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10762016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10772016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10782016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10792016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10832016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10882016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10902016-10-28Weekly0.9http://www.linija-svitla.ua/product/zerkalo-elstead-felves-oval-mir2016-10-28Weekly0.9http://www.linija-svitla.ua/product/zerkalo-elstead-feremy-mirror2016-10-28Weekly0.9http://www.linija-svitla.ua/product/zerkalo-elstead-fesilvertw-mirr2016-10-28Weekly0.9http://www.linija-svitla.ua/product/zerkalo-elstead-fexera-mirror2016-10-28Weekly0.9http://www.linija-svitla.ua/product/zerkalo-elstead-fezara-mirror2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-elstead-cbkt3-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzspike-d2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-massive-3346417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-elstead-cbkt5-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzbrnze-pole-a2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3684732102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-375011113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3749211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3743211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3742711132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3757260132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3757460132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3703217132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-385921110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-455043210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-375373813dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-332133113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3321348132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3021617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3321293132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-4554517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-455458613dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3321301132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-332133013dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3668231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3668230li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-3450031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3673248lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3673248li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3673748li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3675211li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3675217li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-3691230lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-3691230lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-3691260lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-3691260lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3692231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3692232li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4593630102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3736230li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3736231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-3714748li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4593632102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11312016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11322016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11332016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11342016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11352016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils11362016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy33-limepr32016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy33-steelft92016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy35-ebony2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy35-snowt32016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10912016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10922016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10932016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10942016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10952016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10962016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10972016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10982016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils10992016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-luis-collection-luils11032016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzbrnze-pole-b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzbrnze-pole-c2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzbronze-adpt-a2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzbronze-flg-a2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kreplenie-garden-zone-gzbronze-flg-b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kabel-garden-zone-gzcable-20m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kabel-garden-zone-gzcable-2m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kabel-garden-zone-gzcable-3-way2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kabel-garden-zone-gzcable-set-10m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/kabel-garden-zone-gzcable-set-16m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-4555117132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-4555611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-lirio-6851131lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-lirio-6851030lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431173017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431188417dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431193017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431193217dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431195917dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431203017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431215917dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-massive-431233017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-elstead-hqco15-28672016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-elstead-hqco15-34042016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-elstead-hqco15-34142016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-elstead-hqco15-34372016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-elstead-hqco15-34412016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-elstead-hqco15-74512016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-elstead-hqco15-74602016-10-28Weekly0.9http://www.linija-svitla.ua/product/plafon-elstead-hqco15-74712016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy33-21342016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqcy33-74772016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr12-74602016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr12-74712016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr15-74512016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr15-74592016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr30-34412016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr30-74592016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr35-34142016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr35-74512016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr40-74512016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-hqdr40-74592016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10382016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10392016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10402016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10412016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10422016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10442016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10462016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10512016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10542016-10-28Weekly0.9http://www.linija-svitla.ua/product/abazhur-elstead-luils10552016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3731711102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-4554848lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-4555331lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-4555348lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-4560511li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4593631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-4560517li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-4560611li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-4561011li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-4561017li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-4560617li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-4554831lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-4561448li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5702048lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5702048lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5702248lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-451318710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5704031lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5704031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5705230lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5790087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5791031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6670430162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6670487162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3018511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5706230lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5706230li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5706232li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5706232lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5706231lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5706231lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3759231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3641206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3320548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3461048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3461148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3461248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3461348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3461417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3461517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3461531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3461617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3461848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3680048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3680048362016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3680148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3641217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-362581432016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-118450135dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-330653115dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-334003110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-334023110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-385374310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-389870610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-803270112dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3882786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3678217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3689231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3626717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3665232102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3018531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3461748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-8000202012016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-455045310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-331685510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-335204810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3352348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-6622806102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-6740187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3836711102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3210417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3412448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3318134102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3319132102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3319133102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-332013110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3899206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-340051110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-331323115dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-455044910dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3340217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3340248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3340606102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-334061710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-386274210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-806811339dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-818630101dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3899717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-368871710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3627217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-386571710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3350017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3352417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3352517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-415764312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-48956217dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-489563172016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3650206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5004317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5004817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3650217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-1616487102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-117972111dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-330651110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-330761710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3312187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3312287102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3316655102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3316755102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8091001872016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-809110156dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8091301562016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-811750201dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-8167001012016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-8167002012016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-817480135dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3201811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3672718lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3861718lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-3861786lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3360130162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-369674313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3701717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3702231132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3704011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3704211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3704711132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3713244132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3625706102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3824211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-403301713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-4531611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-455504313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-511808713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-511818713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-5118287132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3728786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-819790138dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-8197901432016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3865255102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-386425510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3322730102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3322731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-415062312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3350617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3351148102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3641717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3851743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-4591831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3323343102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3308048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3308148102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5587030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5120130102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5120187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3410348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3410448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3321848102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3321948102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3769786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4556411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3881242102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3770206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3772206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3776255102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3767286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3766786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3774243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3775206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3773243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3772786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3858286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-6661206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3323231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3323106102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3323117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3323217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3323274102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3323017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3318233102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-3794748li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3712243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-5715048li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-lirio-5715031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6670730162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6670731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6670787162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3759717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3781217132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3722711132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-455614813dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3761231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3760786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5639012132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5639011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5639017132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3896743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3724248132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-372573113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3725753132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3726717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3726786132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3884243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3789743132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-4556714132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-455673113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-4556793132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3780226132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3780231132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3784286132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3727292132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3326343132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3326443132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-388374310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3325011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-385778610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-eseo-3026006132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-eseo-3026017132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-eseo-3026106132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-eseo-3026117132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-386328610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3878286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3723748132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3777717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3724211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3752211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3753286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6906430162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6906487162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6908531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6908587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6908630162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6908631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6908731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6908787162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6906931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6906987162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5791748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5791731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6907031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6907031962016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6908087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6908087962016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6908287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3650743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6917348ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6917330ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3683017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-500601715dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3461848102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3316955102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-415061312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8081569102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3649243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3308006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3308106102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3321831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3321931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3323769102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3324217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3324243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3324348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3324531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-6670587102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-6670530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5644011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5642048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5642031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5641043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5641031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5641017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5566148102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3751248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5566131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5565048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3324548102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3324630102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ov1-ivorygold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3324631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3324738102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-8119502042016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3324793102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3324838102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3324911102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3325218102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3325243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3325443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3325643102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3325731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3325748102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3325831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3325931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3325948102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3326106102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3326117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3330787102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3411011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5565031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3765731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5564031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5552030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3786711102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3786731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3789206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5315048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5314048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3795748102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5313048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3798243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5225031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3799255102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3637743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3799786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5224043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5223011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt01339d2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5095017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5092017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-4560117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4557787102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4557731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4556893102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4556848102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3746743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-369528610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3756243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5799031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5799048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-41406131copy2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3898243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3723748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3777717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3750111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-0761601542016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3743211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-4556148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4555611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3725731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3725753162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3748217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3748230162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3633730162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3633731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-762601542016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3726717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3726786162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3612706162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3612717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-4556714162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-4556731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-4556793162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3780226162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3780231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3325111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3325011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3321330162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3321331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3321348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-philips-3026006162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-philips-3026017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-philips-3026106162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-philips-3026117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-662281710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-335304810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3461517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3461531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3862204102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5540232102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5540235102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5206006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-368004810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-376078611dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-376123111dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-377278611dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3306317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3313287152016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3319131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3351348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3411648102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3412067102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3461148102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-346124810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-kichler-kllacey1-mb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3643748102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3773792102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3851286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3880755102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-4550355302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8081201672016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8174801472016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3791211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3791217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3791231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3462417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3805211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4570111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3815206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3815217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3327256102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3327717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3327786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3327948102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3328011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3327611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3327469102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3327511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3328543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3328686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5578011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5090017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5581011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5581043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5582017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5579086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3414411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3414431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3414511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3414211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3414311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3784717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3784743132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3800243132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3800743132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5716013li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5627033102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3320831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3310917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-1502130102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3327368102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3300617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3769211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3300717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-4581111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3319617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5221043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5575011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5576011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5577017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8117502112016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360648962016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3361230162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3361231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3361248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3320030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3320038102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3301417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3306517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3311517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3320631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557206162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3320693102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557293162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557332162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557393162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557430162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557432162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557433162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557455162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3301217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557460162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557487162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557806162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557817162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4557917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5790531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5790548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3312717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3313217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3327131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3327148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3328911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3328931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3329031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3329048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3360931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3361011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3361017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3316117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3361031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5645017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-332101710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5646048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5649031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5649048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5794517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5794531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3042211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3042231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3042311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3042331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-1179721172016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3316017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3309917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3309931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3361130162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3361131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3361187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3361406162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3361411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3318411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3361417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3691911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3691917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4076617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3307517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5801131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5801148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-332013010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3320231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8081301672016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3798711132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-3804711132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3815730132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3815760132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3820706132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-eseo-3820717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-eseo-4500943132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-3360531962016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-3683730li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-3683731li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-3709731li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-3709748li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5716031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5799031962016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-lirio-5799048962016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3326443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3326931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3326943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3328786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3800743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3305011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3817211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3820706102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3820717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3846211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3305017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-5006006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-5006017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5015031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5015231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5096043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5096243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5098017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5098217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5099217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5465017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5465217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5494006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5494017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5494043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5494206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5494217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3704511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5494243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5692017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5692217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8153101112016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-7626015542016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8153101172016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8153101312016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3308417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3308548102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3308717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3698717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3316432102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3316434102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3316435102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3320930102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3319887102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3319967102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-808120167dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3786711162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3786731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8081501672016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5306048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5309031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5309231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8081601562016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5312011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5312211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5314048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5314248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5315048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5315248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5427017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5427217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5559030162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5559067162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5559230162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5559267162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5565031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5624031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5624048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5624231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5624248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5632031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5632231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5641017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5641031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5642031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5642048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5642231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5642248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5644011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5644211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5717017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5717031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5717044162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5717217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5717231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5717244162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5800017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5800117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5806011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5806017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5806111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-5806117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6673030162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-6673087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3319530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ag1-aged-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ag1-pol-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ag1-pol-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ag2-aged-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ag2-pol-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ag2-pol-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-aml2-blksilver2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-aml2-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-art2-agd-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bb1-brz-patina2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bb2b-brz-patina2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-br1-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-br2-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-cn22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-crt2-silvergold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-dy2-silvergold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fp1-pol-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fp2-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-hr2a-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ll2-ant-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ll3-ant-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-lun2-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-lun2-blksil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-ovwu-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ox22016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-elstead-pl110-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-pm2-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-rbwu-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-rb22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-tchwu-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-wm12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-wm22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-wr2-graphite2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feabbey12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feannabelle22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fearabesque22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fearabesque12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feargento12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feclarissa22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8153101702016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fedrawing-rm12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fedrawing-rm22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-sax1-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-sax2-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-fejustine2a2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fejustine2b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8153101712016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fekelham-hall12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feleila22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-felucia12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-femarcella22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feremy12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fezara12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkplymouth12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkyorktown12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8153101012016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkyorktown22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qzkendra12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-qzmarquette12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qzshelby12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3300617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-philips-3308706162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-philips-3308717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3320087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3320631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3320693162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3323106162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3323117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3324631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3326106162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3326117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3327469162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3327611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3327717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3327786162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3328011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3345017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3345117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3345217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8174801312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3411011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3411117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8174801432016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-817480147dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3318030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3751248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3349231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3303031172016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3303043172016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3306506102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3630217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3316006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3318717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3301217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3305017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3320030162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3320443162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3323217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3323247162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3323343162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3324243162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3327256162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3347017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3309843102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3667717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3308406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3753286162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3765731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3308706102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3767286162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3795748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-8167001062016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-8167001112016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-8167002062016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-8167002112016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-819650131dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8199901732016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-4556848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-4556893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3315504102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3315743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-art2-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-cbwu-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-flambeau-fbdiego12016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3745586132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3320443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-fegianna3w2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkmayflower12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkmeridian12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkmonaco12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkmonaco22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkwhitney12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qzadonis12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qzlaila22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8059501432016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3325731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3325948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3410117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3326043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-8068301432016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3316143102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3318786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3321086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3318586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-4555543162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5091017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5091217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5115017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3318686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5115086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5115186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3319743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-chwu-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3667731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3667717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-378673116-led2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-366773110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-562804810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-5628148102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-562824810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-5552048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-by1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-by2-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-cbwu-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-cb1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-cb2-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ch1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ch2-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-cn2-burgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-5449017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-cw2-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-em2-copper2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-em2-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fegianna12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3737243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-5521070102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-femalia22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-femarcella12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fepickeringl12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fepickeringl22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-521101710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fesonomavalvs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fesonomavalwu2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fesonomaval12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fesonomaval22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-festirlingcas12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-festirlingcasw12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-festirlingcasw22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5553031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-feurbanrwlwb12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-555323110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fly1-brzant2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fly2-brzant2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fp1-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-fp2-pol-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-ghwb-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-ghwb-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5099017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5427017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5427217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-5438031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-hkmiddlefield12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-hkmiddlefield22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-hktruman12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-541201710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-hkzelda1-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-hkzelda1-vs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5412217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5209011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-520921110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5206017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-hqelement-1lt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-hqelement-2lt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5206117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-hqlucerne-1lt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-hqlucerne-2lt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5206217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-hr2a-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5207031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5207131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5203017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5203117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5203217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3627732102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-mn1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-mn1-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-mn1-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-mn2-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-mn2-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-mn2-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ov1-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ov2-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-pbwu-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-pbwu-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-elstead-pl110-ab2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-elstead-pl110-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-elstead-pl110-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-elstead-pl110-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-elstead-pl120-ab2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-elstead-pl120-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-elstead-pl120-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-elstead-pl120-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-pv1-ab2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-pv1-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-pv1-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-qzchantilly12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-qzmadisonm1-is2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-qzmadisonm1-wt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-qzmarinel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-qzmarinem2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-qzmarines2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-qznolan12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-rb2-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ry1a-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ry1b-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ry2a-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-ry2b-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-tchwu-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-qzsutton-pl12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-philips-3328431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4500943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-elstead-crusader-wl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-flambeau-fbaudubon12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-flambeau-fbdumaine12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-flambeau-fbflambeau22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-flambeau-fbla-fleur12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-flambeau-fbpalm-luxe12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-flambeau-fbsimone22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fearbor-creek12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fearbor-creek22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-feaudriew12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-feaudriew22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feaveline12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feaveline22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3750730102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-febluffton12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-fediamond12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fedrawingrm2b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-feharrow12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fehuntley12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-fejoplin12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-feleila12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-felumierem-oak2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-felumieres1oak2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-felumieres2oak2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-fetriomphe2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-feiss-feurbanrwlwb22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkbolla1b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkcambridge12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkcambridge22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-511609310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-511629310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkcarabel22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkcongres1a-bc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkcongres1a-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkcongres1b-bc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkcongres1b-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkcongres1c-bc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkcongres1c-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkdunhill12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5549093102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5549293102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkgemma2a-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkgemma2a-vbz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkgemma2b-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkgemma2b-vbz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkhampton12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkhampton22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5515006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkkingsley12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5515206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hklanza22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5515306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkmime22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hknest1-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkrigby1-kz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5207062102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hksussex12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hksussex22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5207162102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkwalden22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkwingate22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5207462102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-531104810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-531124810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-kichler-klahrendale12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-kichler-klaleeka12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-kichler-klbrinley12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-kichler-klcelestial12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-kichler-klcity-lights22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-kichler-klcrstskye22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5308011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5308211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-kichler-klloom12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5309031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-kichler-klmoxie22016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-kichler-klroswell12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5309231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-kichler-klsaldana12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-kichler-klsilcoral12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-5303048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qzadmiral1-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qzadmiral1-ib2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3411117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qzchelsealoft12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3411217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qzgotham12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qzinglenookwu2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qzkamiwu2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3411848102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qzkyle12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qzstephen12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qztheaterrow1is2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qztheaterrow1wt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qztrilogy12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-341206710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3412848102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3411848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3321131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3321148102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3410117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3412448302016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-335221710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3353148102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-335334810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3352117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3353448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3350148102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3351048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3351248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3340017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-massive-3340417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3347017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3347117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3347217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3345017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3345117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3345217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3349031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3349131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-3349231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-388075510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-331695510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-385174310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-364171710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-335061710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-335114810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-41506231dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-377379210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-459183110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-330505610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-dlya-kartin-elstead-pl120-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-sax1-blksil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-sax2-blksil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-330944310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-massive-331620610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-flambeau-fbfragment-g12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastennyy-svetilnik-flambeau-fbfragment-s12016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-genie-8w-827-e14-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-a55-100w-230v-e27-cl1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-hp-genie-8y-11w840-e14-1ph62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-a55-100w-230v-e27-fr1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-genie-11w-827-e14-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-a55-40w-230v-e27-cl1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-genie-8yr-11w-e27-cw-1ph62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-a55-40w-230v-e27-fr1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-genie-8yr-14w-e27-cw-1ph62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-genie-8yr-18w-e27-cw-1ph62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-a55-60w-230v-e27-cl1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-a55-60w-230v-e27-fr1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-genie-11w-827-e27-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-genie-14w-827-e27-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-a55-75w-230v-e27-cl1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-genie-14w-865-e27-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-a55-75w-230v-e27-fr1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-genie-18w-827-e27-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-a55-25w-230v-e27-cl1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-genie-18w-865-e27-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-100w-e27-230v-a55-cl-1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-100w-e27-230v-a55-fr-1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-75w-e27-230v-a55-cl-1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-circular-25w-827-e27-230-240v-1ct62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-75w-e27-230v-a55-fr-1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-downlighter-es-11w-ww-e27-1ct62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-downlighter-es-7w-ww-e14-r50-1ct2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e27-230v-a55-cl-1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e27-230v-a55-fr-1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e27-230v-a55-cl-1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-8w-ww-e14-230-240v-b42-1pf102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e27-230v-a55-fr-1ct12x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-20w-ww-e27-230-240v-t65-1ph62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-20w-ww-e27-230-240v-g120-1ch42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-pl-s-9w8272p-1ct5x10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-pl-s-9w8302p-1ct5x10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-pl-s-9w8402p-1ct5x10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-pl-s-11w8272p-1ct5x10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-pl-s-11w8302p-1ct5x10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-pl-s-11w8402p-1ct5x10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-pl-c-26w8302p-1ct5x10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-b35-60w-230v-e14-cl1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-b35-40w-230v-e14-fr1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-tl5-circular-22w830-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-tl5-circular-40w830-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e14-230v-b35-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-tl5-circular-60w830-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-b35-40w-230v-e14-cl1ct1002016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-b35-60w-230v-e14-cl2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-b35-60w-230v-e14-fr1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-25w-e14-230v-b35-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-25w-e14-230v-b35-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e14-230v-b35-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e14-230v-b35-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e14-230v-b35-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-b35-60w-230v-e27-fr1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e27-230v-b35-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e27-230v-b35-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e27-230v-b35-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-p45-40w-230v-e14-cl1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-p45-60w-230v-e14-cl1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-p45-40w-230v-e14-fr1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-p45-60w-230v-e14-fr1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-25w-e14-230v-p45-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e14-230v-p45-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e14-230v-p45-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e14-230v-p45-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e14-230v-p45-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-p45-40w-230v-e27-fr1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-p45-60w-230v-e27-fr1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e27-230v-p45-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e27-230v-p45-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e27-230v-p45-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-e-22w33-640-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e27-230v-p45-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-e-32w33-640-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-e-40w33-640-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-deco-25w-e14-230v-bxs35-cl-1ct4x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-tl5-he-14w830-slv402016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-deco-25w-e14-230v-bxs35-fr-1ct4x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-deco-40w-e14-230v-bxs35-cl-1ct4x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-d-18w33-640-slv252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-deco-40w-e14-230v-bxs35-fr-1ct4x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-d-18w54-765-slv252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-deco-40w-e14-230v-bw35-cl-1ct4x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-d-36w33-640-slv252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-deco-40w-e14-230v-bw35-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-d-36w54-765-slv252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-deco-60w-e14-230v-bw35-cl-1ct4x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-deco-60w-e14-230v-bw35-fr-1ct4x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-200w-r7s-220-240v-cl-pila-2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-300w-r7s-220-240v-cl-pila-2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-de-500w-230v-r7s-118mm1ct1002016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-linear-150w-r7s-230v-2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-lin117-2y-150w-r7s-230v-1bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-linear-200w-r7s-230v-2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-linear-300w-r7s-230v-cl-2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-capfight-10w-g4-12-v1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-capfight-35w-gy635-12-v1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-capfight-50w-gy635-12-v1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-capfight-pila-10w-g4-12-v-cl-4bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-capfight-pila-20w-g4-12-v-4bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-capfight-pila-35w-gy635-12-v4bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-capsl-20w-g4-12-v-cl1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-caps-10w-g4-12-v-cl-2000h-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-caps-10w-g4-12-v-cl-4000h-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-caps-20w-g4-12-v-cl-2000h-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-caps-20w-g4-12-v-cl-4000h-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-caps-50w-gy635-12-v-cl-2000h-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-caps-2y-10w-g4-12-v-cl-2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-caps-2y-20w-g4-12-v-cl-2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-caps-2y-35w-gy635-12-v-cl-2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-caps-2y-50w-gy635-12-v-cl-2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-caps-4y-10w-g4-12-v-cl-1bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-caps-4y-20w-g4-12-v-cl-1bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-clickline-40w-g9-230v-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-clickline-40w-g9-230v-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-clickline-60w-g9-230v-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-clickline-60w-g9-230v-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-massive-ph-hal-caps-2y-60w-g9-230v-fr-1bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-caps-2y-40w-g9-230v-fr-1bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-accent-20w-gu53-12-v-36d-1ct10x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-accent-35w-gu53-12-v-36d-1ct10x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-accent-50w-gu53-12-v-36d-1ct10x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-dichro-figh-20w-gu53-12-v-36d3bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-dichro-figh-50w-gu53-12-v-36d3bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-hal-dich-2y-20w-gu53-12-v-36d-1ct10x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-dich-2y-35w-gu53-12-v-36d-1ct10x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-dich-2y-50w-gu53-12-v-36d-1ct10x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-dich-4y-20w-gu4-12-v-30d-1bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-aluline-111-50w-g53-12-v-24d-1ct62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-twist-1y-35w-gu10-230v-40d-2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-twist-2y-50w-gu10-230v-40d-1bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-twist-alu-230v-35w-gu10-40d2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-twist-alu-50w-gu10-230v-40d1ct10x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-pl-twist-alu-50w-gu10-230v-40d2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tw-alu-2000h-50w-gu10-230v-20d-1ct10x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-appl-15w-e14-230-240v-t25-cl-rf-1ct2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-deco-15w-e14-230-240v-t25-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-t25-15w-230-240v-e14-cl1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-appl-40w-e14-230-240v-t25l-cl-ch-1ct202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-app-15w-e14-230-240v-t22-cl-ov-1ct2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-app-25w-e14-230-240v-t25-cl-ov-1ct2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-decoled-od-1w-e27-wh-230-240v-g50-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-40w-e14-230v-b35-wh-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-60w-e14-230v-b35-wh-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-40w-e14-230v-t45-wh-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-60w-e14-230v-t45-wh-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-40w-e27-230v-t45-wh-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-100w-e27-230v-t55-wh-1ct24x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-40w-e27-230v-t55-wh-1ct24x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-60w-e27-230v-t45-wh-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-75w-e27-230v-t55-wh-1ct24x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-softone-60w-e27-230v-t55-wh-1ct24x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-60w-e27-230v-g80-wh-1ct302016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-60w-e27-230v-g95-wh-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-100w-e27-230v-g120-wh-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-60w-e27-230v-g120-wh-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-refl-30w-e14-230v-r39-45d-1ct302016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-refl-60w-e14-230v-nr50-30d-1ct302016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-refl-25w-e14-230v-nr50-30d-1ct302016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-refl-40w-e14-230v-nr50-30d-1ct302016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-nr50-40w-230v-e14-30dgr-fr1ct6x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-refl-40w-e27-230v-nr63-30d-1ct302016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-refl-60w-e27-230v-nr63-30d-1ct302016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-refl-60w-e27-230v-nr80-25d-1ct252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-nr63-60w-230v-e27-30dgr-fr1ct302016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-refl-75w-e27-230v-nr80-25d-1ct302016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-refl-100w-e27-230v-nr80-25d-1ct252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-reflcm-40w-e27-230v-nr63-si-cl-1ct202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-t2-8w-827-e14-220-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-t2-12w-827-e14-220-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-t2-12w-e14-220-240v-1ph62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-t2-12w-827-e27-220-240v1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-t2-12w865-e27-220-240v-1ph62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-es-t3-15w-ww-e27-220-240v-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-es-t3-15w-cdl-e27-220-240v-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-15w-827-e27-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-15w-865-e27-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-es-t3-20w-ww-e27-220-240v-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-esaver-20w-865-e27-230-240-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-20w-827-e27-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-20w-865-e27-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-es-t3-23w-ww-e27-220-240v-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-es-t3-23w-cdl-e27-220-240v-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-23w-827-e27-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-23w-865-e27-230-240v-1ppf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-economy-11w-827-e14-230-240v-1pp62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-economy-11w-827-e27-230-240v-1pp6-1pp62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-economy-14w-827-e27-230-240v-1pp62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-economy-14w-865-e27-230-240v-1pp62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-economy-20w-827-e27-230-240v-1pp62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-economy-20w-865-e27-230-240v-1pp62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-economy-23w-827-e27-230-240v-1pp62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-economy-23w-865-e27-230-240v-1pp62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-pl-b35-40w-230v-e14-cl2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e14-230v-b35-cl-1ct10x10f-22016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-pila-ph-hal-dich-2y-20w-gu53-12-v-36d-1ct10x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-massive-ph-genie-8yr-11w840-e14-1ph62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e27-230v-a55-cl-2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e27-230v-a55-fr-2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3745686132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e27-230v-a55-cl-2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e27-230v-a55-fr-2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-150w-e27-230v-a65-cl-1ct202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-200w-e27-230v-a80-cl-1ct202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-42w-e27-230v-a55-fr-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e14-230v-b35-cl-2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e14-230v-b35-fr-2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e14-230v-b35-fr-2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e14-230v-b35-cl-2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e27-230v-b35-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-kryp-40w-e14-230v-b35-wh-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-kryp-60w-e14-230v-b35-wh-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-18w-e14-230v-b35-cl-1ct152016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-28w-e14-230v-b35-cl-1ct152016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-28w-e14-230v-b35-fr-1ct152016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-28w-e14-230v-bw35-cl-1ct152016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-28w-e14-230v-bxs35-cl-1ct2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-42w-e14-230v-b35-cl-1ct152016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-25w-e14-230v-p45-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e14-230v-p45-cl-2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-40w-e14-230v-p45-fr-2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e14-230v-p45-cl-2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-60w-e14-230v-p45-fr-2ct12x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-42w-e27-230v-a55-cl-1bc102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-53w-e27-230v-a55-fr-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-53w-e27-230v-a55-cl-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-70w-e27-230v-a55-cl-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-70w-e27-230v-a55-fr-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-105w-e27-230v-a55-cl-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-105w-e27-230v-a55-cl-1bc102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-140w-e27-230v-a55-cl-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-kryp-25w-e14-230v-p45-wh-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-kryp-40w-e14-230v-p45-wh-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-kryp-60w-e27-230v-p45-wh-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-28w-e14-230v-p45-cl-1ct202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-42w-e14-230v-p45-cl-1ct202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-28w-e27-230v-p45-cl-1ct202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-42w-e27-230v-p45-cl-1ct202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-25w-e27-230v-p45-fr-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stan-25w-e27-230v-p45-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-deco-15w-e14-230v-bxs35-cl-1ct4x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-42w-e27-230v-g95-cl-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-28w-e14-230v-nr50-fr-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-28w-e27-230v-nr63-fr-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-42w-e27-230v-nr63-fr-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-42w-e27-230v-r80-25d-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-tl5-he-21w827-slv402016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-tl5-he-21w830-slv402016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecoclassic30-70w-e27-230v-r80-25d-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-nr95-100w-230v-e27-20dgr-fr1ct302016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-reflcm-60w-e27-230v-nr63-si-cl-1ct202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-par38-60w-e27-230v-sp-12d-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-par38-120w-e27-230v-sp-12d-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-par38-120w-e27-230v-fl-30d-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-t2-5w-e14-220-240v-1ph62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-t2-slim-8w-ww-e14-220-240v-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-t2-slim-12w-ww-e14-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-es-32w-cdl-e27-220-240v-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-32w-ww-e27-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-high-lumen-42w-ww-e27-1ct62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-es-dimmable-13w827-e27-1pf122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-es-dimmable-20w827-e27-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tornado-es-automatic-20w-ww-e27-1pf122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-stick-es-9w-ww-e14-220-240v-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-economy-18w-827-e27-230-240v-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-genie-es-23w-ww-e27-220-240v-1pf122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-genie-11w-ww-e14-220-240v-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-genie-18w-ww-e27-220-240v-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-circular-25w-cdl-e27-220-240v-1ct6dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-12w-ww-e14-b45-1pf102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-eco-candle-twist-5w-ww-e14-1pf122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-eco-candle-twist-8w-ww-e14-1pf122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-7w-ww-e14-230-240v-t45-1pp102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-12w-ww-e27-230-240v-t60-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-16w-ww-e27-230-240v-t60-1pf62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ambiance-t-14w-e27-827-220-240v1ph62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-12w-ww-e27-230-240v-g93-1ch42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-20w-ww-e27-230-240v-g93-1ch42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-16w-ww-e27-230-240v-g120-1ch42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-downlighter-es-7w-ww-gx53-1bc122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-downlighter-es-9w-ww-gx53-1bc122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-downlighter-es-7w-ww-gu10-r50-1pf102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-pl-e-refl-r50-7w-ww-gu10-220-240v-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-pl-e-refl-r50-7w-ww-e14-220-240v-1ct102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-pl-l-24w8274p-1ct252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-pl-l-24w8304p-1ct252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-pl-l-24w8404p-1ct252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-pl-l-40w8304p-1ct252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-pl-l-40w8404p-1ct252016-10-28Weekly0.9http://www.linija-svitla.ua/product/ballast-philips-ph-hid-pv-c-70i-cdm-220-240v-5060hz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/ballast-philips-ph-hid-pv-c-70i-cdm-220-240v-5060hz-22016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-e-22w54-765-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-e-32w54-765-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-e-40w54-765-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-pl-q-16w8304p-1ct10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-pl-q-38w8304p-1ct10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-tl5-he-14w827-slv402016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-tl5-he-21w865-slv402016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-tl5-he-28w830-slv402016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-mini-4w33-640-fam10x25box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-mini-6w33-640-fam10x25box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-mini-6w54-765-fam10x25box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-mini-8w33-640-fam10x25box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-mini-8w54-765-fam10x25box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-mini-13w33-640-fam10x25box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-tl-d-food-18w79-slv252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-tl-d-food-30w79-slv252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-master-tl-d-food-36w79-slv252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-d-15w33-640-slv252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-d-15w54-765-slv252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-d-30w33-640-1sl252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-d-30w54-765-1sl252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-d-36w33-640-1sl252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-d-36w54-765-1sl252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-tl-d-58w54-765-1sl252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-plusline-es-118mm-2y-160w-r7s-230v-cl-1bb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-plusline-s-300w-r7s-230v-1bb10x10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-plusline-es-118mm-2y-400w-r7s-230v-cl-1bb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-plusline-s-500w-r7s-230v-1bb10x10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-plusline-es-78mm-2y-48w-r7s-230v-cl-1bb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-plusline-c-60w-r7s18-230v-1bb10x10cc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-plusline-es-78mm-2y-80w-r7s-230v-1bb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-lin78-2y-100w-r7s-230v-1bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-plusline-c-100w-r7s18-230v-1bb10x10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-plusline-es-78mm-2y-120w-r7s-230v-cl-1bb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-plusline-c-150w-r7s18-230v-1bb10x10box2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-lin78-2y-150w-r7s-230v-1bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-caps-35w-gy635-12-v-cl-4000h-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-caps-50w-gy635-12-v-cl-4000h-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-caps-14w-g4-12-v-cl-1bc102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-capsule-25w-gy635-12-v-cl1bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-capsule-35w-gy635-12-v-cl1bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-clickline-18w-g9-230v-cl-1ct2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-mv-caps-28w-g9-230v-sf-1bc102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-clickline-28w-g9-230v-cl-1ct2016-10-28Weekly0.9http://www.linija-svitla.ua/product/starter-philips-ph-s10-4-65w-sin-220-240v-wh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-mv-caps-42w-g9-230v-sf-1bc102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-clickline-42w-g9-230v-cl-1ct2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-clickline-53w-g9-230v-cl-1ct2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-caps-2y-60w-g9-230v-cl-1bc102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-14w-gu4-12-v-mr11-30d-1bc102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-25w-gu4-12-v-mr11-30d-1bc102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-14w-gu53-12-v-mr16-36d-1bc102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-twist-18w-gu10-230v-25d-1bc102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-twist-1y-35w-gu10-230v-mr11-20d-2bc-35-mm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3745886132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-pl-twist-alu-230v-35w-gu10-40d1ct10x5f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-twist-25w-gu10-230v-50d-1bc102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ecohalo-twist-35w-gu10-230v-mr16-50d-1ct2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-twist-1y-50w-gu10-230v-40d-2bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-twist-2y-75w-gu10-230v-25d-cl-1bl102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-hal-twist-2y-75w-gu10-230v-25d-cl-1bl10-65-mm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-deco-25w-e14-230-240v-t25-cl-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-appl-40w-e14-230-240v-t25l-cl-2bl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-masterc-cdm-t-70w830-g12-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-masterc-cdm-tc-70w830-g85-1ct122016-10-28Weekly0.9http://www.linija-svitla.ua/product/ballast-philips-ph-hid-pv-c-70i-cdm-220-240v-5060hz-32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-12w-ww-e27-b45-1pf102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-7w-ww-e27-230-240v-t45-1pf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-soft-es-9w-ww-e27-230-240v-g93-1ch42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-downlighter-10w-ww-gu10-1pf122016-10-28Weekly0.9http://www.linija-svitla.ua/product/ballast-philips-ph-hid-pv-c-70i-cdm-220-240v-5060hz-42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt011352016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt011202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt011092016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012802016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012502016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt013252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt013162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt014252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt015252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt014992016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt015992016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt011992016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt013262016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012492016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt018492016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-lt018692016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt019352016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt019502016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt029202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt029352016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt018202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt028202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt028352016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt028502016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt017242016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt017402016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt016402016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012412016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt021362016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt022202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt011362016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt018352016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt018502016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt018512016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt016202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt017202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012602016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012992016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-je018492016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012762016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt013402016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt013242016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt01324d2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt013392016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt010102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt010202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ledspotmv-45-50w-gu10-827-36d2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-led-fila-43-50w-e27-ww-a60-nd-1ct-apr2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-led-fila-75-70w-e27-ww-a60-nd-1ct-apr2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lpfm25we14ret2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lpfm30we14cdl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lpfm30we14c-t2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lpfm30we27eds2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lpfm30we27tub2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lpfm40we14t252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lpfm60we14cdl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lpfm60we14c-t2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lpfm60we27eds2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lpfm60we27ret2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-mas-ledcandle-dt-6-40w-e14b38clap-dimm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-mas-ledcandle-dt-6-40w-e14-827ba38-dimm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-pph-led-40w-e14-ww-230v-b39-cl-d4-dimm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-ledbulb-scene-switch-95-60w-e2730006500kpf-60w2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-caps-20w-gy635-12-v-cl-4000h-1ct10x10f2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-led-fila-43-50w-e27-ww-st64-nd-1ct-apr2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-philips-ph-led-fila-75-70w-e27-ww-st64-nd-1ct-apr2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt014402016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt015402016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt018602016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012402016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012612016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt019202016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt012752016-10-28Weekly0.9http://www.linija-svitla.ua/product/lampochka-light-topps-lt013412016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbfragment-s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-80702567dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ov5-ivorygold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ov8-ivorygold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-pm6-db2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkbollasf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkbolla52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkcellosf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkcello62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkcello92016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkchandon62016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkhadleyf-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkhadleyf-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkhadleyf-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkmayflower32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkmayflower62016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkplantfs-pl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkplantfs-pz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkplantfl-pl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkplantfl-pz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkplant3-pz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkplymouthf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hktrumansf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ghp-db2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkchandon92016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkplant3-pl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkplant4p-pl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkplant4p-pz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkplymouth8p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-pbfa-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-pbfa-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4184911102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4159987102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-7525001552016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-385901110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3859111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3684533102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3684532102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5764087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5765087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3699031132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-806025872016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-80702587dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-808025872016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3735543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-375001113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3641061132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-364166113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3641561132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3664532102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-402181713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5762087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkmayflowerpc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3749011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3749111132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-374301113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4037131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-374311113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4165048132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4165148132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3742511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3757060132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3757160132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4037162102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3757360132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3703617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4029717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3703017132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3703117132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4044031132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4033117132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-403521713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3714034132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3714134132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4036960102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4027356132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4042431132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4042448132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-4032917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4043117132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4034717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4039817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4041411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-405141713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-403706010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3742611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4032211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4032611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3705011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4033711132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4158611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4030611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4039411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3744511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4023833102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3744811132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3704111132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4029817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4029917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3706511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3707017132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3391411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-402385310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4031011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3705511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3705611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-370461113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3024931132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3706011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3706111132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4038360132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4038460132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4024233102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4038560132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4038660132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3610611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4043911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3754548132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3754648132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4024253102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4044143132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4044148132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3732511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4024296102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3742017132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4034859132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4034959132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4164835102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4034843132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-403494313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3748030132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3748130132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3748017132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3748117132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4164853102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-363353113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3633631132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4027330132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3633530132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-363363013dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-372951110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-416412810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3612617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3612606132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4168333102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-372304313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3707517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4168360102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3707617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3707586132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3707686132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3741586132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3741686132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4178232102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3749043132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3749143132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3702530132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3702630132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3679531132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4178235102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3679631132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3679530132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3679630132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4044211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4044330132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4044430132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-403973113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4039730132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4178253102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-402743113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4027531132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4027443132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-402754313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-416404313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4036430132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4038130132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4019930102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-374758613dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3747686132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3729086132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3729186132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3745518132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3745618132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4019931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3745818132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3748686132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3748586132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3743629132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4035420102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3743686132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3756587132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3756687132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4030731132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4030755132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4035434102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4022711102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-402273310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-375353813dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-402275310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4022811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-302063113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3020717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3020731132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-402285310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3021787132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3021887132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-302089313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3019618132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3019686132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3019918132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3019986132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4159230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4038206132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4038243132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-5638048132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-5638348132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-5638448132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-5638431132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-5638031132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-563833113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3729611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4022833102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4159231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3020711132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4163211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3697530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3261648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4034231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3250948li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3250031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3250131li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3250417li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3450417li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3450470li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3668030li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3697630102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3668031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3668130li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3668131li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3670017li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3250470li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3250517li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3250570li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3250617li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3250670li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3250931li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3251031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3251048li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3670117lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3670317li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3670517lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3740530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3670617lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3670648lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3670548lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3671511li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3672017lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3672117lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3673048li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3673148li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3671611li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3673548li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3675011li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3675017li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3690011li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3690111lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4164430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3690530li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3690560li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3691030li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3691060lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3714548li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4164449102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3714648li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3691130lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3691160lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4176630102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3692031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3692032li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3692131li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3692132li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3692531li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4163311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4176730102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3692532li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3736030lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3736031lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4020748li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4020848li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4020948li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4021317li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4021448li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4021511li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4021711li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4021611li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4020511li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4020517li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4020611li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4020617li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4022117li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4025132li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4025133li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4025160lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4025231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4025331lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4025431lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4176732102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4025348lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4025232li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4025448lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-4025548li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4031211li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4031330li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4031331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4031448li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4035531li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-4054831li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-4054848li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4025831lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4025931lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4101011li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4101111li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3160287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3160031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3160131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4176631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3653553102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3678117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3160231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3160387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3734048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4176731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3734148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3734548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4111011li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4111017li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4168630102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5700030li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5700031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5700231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5700331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4168631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5700431li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5700430li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5700330li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5701848li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5701048lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5701048li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5701548li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5701448li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4163411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4168632102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5701348li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5701248li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-5701748lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-5703731li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-5703931lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-5703948lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-5703748li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4213187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5702848lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5702448lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5702348lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5703031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5703231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5703048li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5703248li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5703331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5703348li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5703648li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5703631li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5703448li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5703431li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4024806102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5704231lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-5704331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-5704431lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5705430li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3734648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3735031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3735087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4024831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3735131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3735187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4161860162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4161960162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4162048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4162148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4024906102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4024931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4027138102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4027143102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4027730102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3784517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3018811162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3261048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3261431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3261531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5705630li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4175030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4027731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5706332lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5706331lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5706330li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5705230lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-402783010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5707031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5707030li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5707030lh2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5707230li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5707231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5707331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4027831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3759031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3759131li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5708331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3759331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3762030li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4038030li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4038031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5708030li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5708031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5708330li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3680248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4023517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4023531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4033911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4033948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4034048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4034131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4034148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4223417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4034248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4039931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3879617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4175031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-362585432016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-385354310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-400970615dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-761506542016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7492487dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-385364310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-320033110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3632048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-707484811dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-800273017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4185686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4176811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4181430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-2198782016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-369801710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4181431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3879155102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3879355102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-388258610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-758904055dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3626517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-563401672016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-56350167dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-584561962016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3626617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-368903110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3689631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3854060102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4016617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4022735102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4022835102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-402383510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4032832102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3731511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-386551710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3664632102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-366513210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-366553210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-366563210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-401803210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-401805310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3882686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3653653102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4164187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-5707330li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4023331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4023348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4018132102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4018153102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-8000205012016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3836511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3845030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-383661110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-402301110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4178711102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4181660102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4180711102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4182611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3899006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3899106102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-301314810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-331891710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7041801322016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7041801352016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7041801532016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4024632152016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-401804910dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4018149102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3845130102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4189806102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4189906102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-385008610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3851186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-385154310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3899517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-386360610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-388304210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3884043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-709630119dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7568003392016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7596301192016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3899617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7696301192016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-59820147dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-599101472016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-365363210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3659011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-365951110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-367651710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3627017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-367764810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3627117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-400451710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-401851710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4175511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-367903310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-367903410dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4184606102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3850587102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4184617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-418468610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3650006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-560130610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3650017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-594451710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-807025322016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-80702535dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-807025532016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-808025322016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-321011710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3699517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3699617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3016204102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-707480135dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4007117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3671086lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4009701102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3674118lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3861518lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3861586lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3861618lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3861686lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-3861886lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3240017132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-324004313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4009706102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-369551713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-369654313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3696643132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3701043132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4016170102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4024735102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4175611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4180911102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4009717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3701517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3701617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-370203113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3625506102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3705111132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3713044132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-371314413dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3625606102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-371901713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-371911713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3739087132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3739187132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-374064313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3740743132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-382401113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4030911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4031611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4032031132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4033811132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-416364313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-416374313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-416401813dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-372858610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3728686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-5118387132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-5118487132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-511868713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-5636430132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-739790338dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7397905382016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3722111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7397903432016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7397905432016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3865055102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3880055102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-386405510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-386415510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-593401432016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4033415102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4033438102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-790680131dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3025530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3025967102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7041860102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3191830102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5587430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5587930102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3688017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-416393010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-416398710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4164730102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3214548102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3214648102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3208131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3765017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3765117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3688117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4043330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4043430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3769586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3769686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4028230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4028238102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4043630102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4043631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3762544102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3762575102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-373101110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4038917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4039660102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4043017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4164833102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4044530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-404453110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3769006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3773592102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3881142102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-377369210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4056411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4053611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3771106102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3771506102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3771006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3771606102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3770006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3770106102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3772006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3772106102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3776055102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3881342102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3767086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3768086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3768186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3766586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3766686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3858086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3774043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3774143102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3774543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3775006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-377510610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-377550610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3773043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3858186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3773143102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3772586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3772686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-403933010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-403937510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4039229102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-385838610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4185317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3018069102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3016569102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-851162131dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-8511514312016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3024348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3024448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-371204310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3767186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3722011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3251548li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3712143102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3251648li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3757531li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3794548li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-3794648li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4055031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4105031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4105131li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4055001li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4055030li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-371254310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3755042102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3720517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3720617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-375514210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3719517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3719617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4044760132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4044860132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3759517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3759617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3755542102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3758611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3781117132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-372251113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3722611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-375803010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-404464813dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4050548132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4044960132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4044961132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4052317132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4052417132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4052711132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4052811132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4052911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-375813010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3776511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3776611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4053311132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4053411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3781511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3781611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3780648132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3780748132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-375853010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3782011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3782117132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3782511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3782611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4053011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4053111132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4053211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3706411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3761031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-6916160ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3761131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3761531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3760586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3760686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4054706132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4054606132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4054506132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4054617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4054517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4157731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5639512132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5639412132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-389654310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5639312132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5639511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5639411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5639311132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5639517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5639417132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-375201110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3896643102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5639317132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5640431132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5640231132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5640031132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5640448132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5640248132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5640048132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3724648132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3724548132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3724148132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-372553113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-372555313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3884143102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-372651713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-372658613dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3789543132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3789643132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3616630132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3625130132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3710530132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3710630132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4055214132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-405523113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-405529313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-378002613dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3780126132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3780031132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3780131132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3883543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3782543132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3782643132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3784086132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3784186132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3727192132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3727592132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-388364310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3727692132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3026343132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3026443132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4054911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-405491713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-375211110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-385758610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4053731132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-385768610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3025111132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3325111132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3784543132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3784643132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3025011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-386318610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-6916131ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5793631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5793731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5798531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5798548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5798631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5798648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5792831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5792931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5792848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5792948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5798131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3884543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3878086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4115755102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5798231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5798431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5798148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5798248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3060431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3060531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4060731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4060831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5799231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5799431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3878186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5799248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5799448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4399231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4399248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3160511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3160531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3160611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3160631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-372354813dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3723648132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3878386102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3777517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3777617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3724611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3724511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3724111132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4054406132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4054306132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3753086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4054206132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4054412132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4054312132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4054212132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4054411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4054311132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4054211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3753186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-6905048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6905148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-6904948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-6905348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-6906031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-6906087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-6906131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-6906187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-6905448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-6905548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6906731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6906787162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6906831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6906887162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6905631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6905731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5791548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5791648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5791848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5791531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3650543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5791631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5791831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6907231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6907331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6907431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-365064310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6908387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6908487162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4034011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6917248ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-6917230ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4060348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5798448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3683317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3741043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4024635152016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-500631715dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-500641715dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3741143102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-500691715dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5472443152016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5494206152016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-549440615dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5494906152016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-559281713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3751048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-326104810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3461048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3680148102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3680248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4023517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-402353110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4223417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3009543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4007106102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4063286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-0807025352016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-406338610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-403604310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4052511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4052611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-403614310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-41556331dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3717062102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3717162102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3751148102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3649043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3649143102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3002331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3019017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3027043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3027967102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3028067102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3029448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3029548102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3030787102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3030887102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3035011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3685562102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3212917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3213017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3215731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3215831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3685662102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3697086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7741811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7067001112016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-369718610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7309505042016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5642448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5642431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5642248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5642231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7309508042016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5641443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5641431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5641417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5641343102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5641331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5641317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-730951204dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5565448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5565431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5565248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5565231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3901086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3901186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3715032102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3715043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3762644102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3765531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5564431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5564331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5564231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5552430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3767548102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5552330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3786511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5552230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3786531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3786611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3786631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5449417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3699543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5449217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-5315948102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3789006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5315448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5315248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3795017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3699643102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3795031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5314348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5314248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3901586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3795117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3795131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3795548102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3637543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3795648102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5313448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3796048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5313248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3796148102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5306348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3798043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3637643102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5225331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5225231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3799055102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3799155102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5224943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3799586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5224443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5224243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4019231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5223411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5223311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5095917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5095617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5095417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5095217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4019248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5092917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5092417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5092217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3746543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4358031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3695086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4185017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4182048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4181560102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4181532102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4159731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4157787102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4064311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4063417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4063120102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4062931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4062832102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4062731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4024260102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4024531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4024533102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4024553102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4035331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4035348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4035435102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4038817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4043511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4056631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4056648102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4056731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4056738102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4056748102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4056848102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4056893102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4057138102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4057143102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4057311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4057430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4057431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4058030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4058087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4059055102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4059155102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4059255102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4059355102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4059455102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4059548102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4059648102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4059917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4060017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4060117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4062631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4062517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3751548102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3756043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4062231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4062230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4061793102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4061757102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4061731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4061648102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4061631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3606517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3606617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3656117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4023930102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5644411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5650355102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7741860102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3898043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4054717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3720517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3898143102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3719517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3719617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4044760162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4044860162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3723548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3723648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3777517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3777617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3750011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3743011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3743111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3722511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3722611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4044648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4050548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-0761606542016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4035217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4044960162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4044961162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4039817162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4041411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4051417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3610611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-0761705542016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3725531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3725553162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-232101542016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3748017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3748117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3748030162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3748130162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4031111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3623017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-0232201542016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3633530162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3633630162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3633531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3633631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4034843162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4034943162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4034859162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4034959162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3726517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3726586162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3612606162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7335703542016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3612617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4039730162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4039731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4055214162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7562301542016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4055231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4055293162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3780026162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3780126162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7562401542016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3780031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3780131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3741586162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3741686162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4054911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4054917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3025111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3025011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3020717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3020731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3020630162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4161443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3020631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3019686162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3019986162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4161543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5638031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5638331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5638048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5638348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4163160102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4163162102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3623117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4161343102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-417584310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4178843102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4175743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4178743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4179086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4181662102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3862304102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-554585511dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5540432102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5540435102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5540453102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5540832102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5540835102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-289063842016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-377705742016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3002632102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3008006152016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3008117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3009443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3009843102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3014106102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3014206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3784617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3017453102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3738087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3211317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3261348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3305056102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3309443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3316206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3603006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3612011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3622047102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3684560102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3706611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3721004132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3850186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3862104102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3880555102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3956006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4017955102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4021917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4022017li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4024633152016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4024653152016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4032760102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4058717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4063617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5007320102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5007335102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5472917152016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5545255102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5545855102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5763087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7700101062016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7705011062016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3738187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4060231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4060931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4063517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4063531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4063631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3791011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3791611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3791017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3791617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3791031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3791631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4058206162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4058217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4058606162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4058617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3790106162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3790111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3790506162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3790511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3790606162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3790611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4065417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-14902672016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4058711162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4058811162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4058817162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3462048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3738687102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4069031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4069048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4068931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4068948102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3805011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3805111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4066111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4066211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4065517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4065617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3739511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3739611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4104111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4104211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4104311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3803030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3803031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4074411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4074987102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4075087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4071817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4071917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4069631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4072087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4072187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4069511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4069517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4069411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4149011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3801511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4070731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4070787102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4070831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4070887102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4104531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4104533102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4104587102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4104430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4104431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4104432102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4070111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-4104648102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4104748102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3804031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3806038102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3806087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4070675102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3716031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3904648102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4062643102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3049111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3048869102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3048969102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3049011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3049443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3049586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5578311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5578411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5090217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5090417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5090617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5581211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5581243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5581411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5581443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5581511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5581543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5581911102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5581943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5582217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5582417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5582517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5582917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5579286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5579486102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5579986102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3201731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3716531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3800043132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3800143132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3800543132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3800643132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3801043132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4063943132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-4064143132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3019431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-4064243132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4064711132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4064786132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4064911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4064986132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-4065011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-4065111132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-4065211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-4065311132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4066426132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3019731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4066430132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4066433132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4066440132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4066449132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4068011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4068111132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4068211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4066459132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3019817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3020087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3796630132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5207962102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4075531li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4075593li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3010917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4075631li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4075693li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4076331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4076431li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4076531li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4075311li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4075211li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4075411li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4075331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4075231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3013417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4075431li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4075711li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4075811li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3716631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3001617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3048687102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3048756102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3769111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3785011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3785111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3785311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3770311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3828030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3828130102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3828031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3828131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4081011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4081111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4088011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4088111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4086611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4084311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4084217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3001211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4084587102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4084531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4084730102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4084732102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4084746102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086760102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3001217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086733102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086796102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4087160102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4087196102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4087132102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4081230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4081296102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4081231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086138102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-301761710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086132102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4084930102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4084933102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4084931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086930102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086999102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4085133102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4085131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4085196102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4039286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4085987102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4085918102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086014102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4086031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5221243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5221943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5221443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5575211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5575311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5575411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5575511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5576211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5576311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5576411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5577217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5577417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5577917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3746031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3017530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3017538102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3736731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3736748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3736831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3736848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3736931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3736948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3737130162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3737131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3737148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3801106162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3801117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3801206162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3801217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4019530162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4019531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4072311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4072317162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4072411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4072417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4072506162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4072511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4072517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4072606162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4072611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4072617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzshelby82016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3805531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4072706162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4072711162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4072717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4073131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4073148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4073186162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4073217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4073286162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073330162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073332162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073333162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073355162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073360162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4073411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073706162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073806162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4073817162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4074011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4074017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4074111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4074117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4074211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4074217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4074311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4074317162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4078911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4079011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4079526162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4079586162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5790631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3853017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3746131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5790648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5790731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5790748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4074517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4074617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4074748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4074848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5645217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5645417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5645917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5646248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5646348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5649231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5649248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-301461710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5649331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5649348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5649431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5649448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5794617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5794631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5794717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5794731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3318817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5794817162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5794831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3009931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3042417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3042431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3065731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3065787162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3066031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3066038162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3066131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3066138162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3066231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3066306162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3066317162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3310031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3342211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3342231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3691611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3691617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3691711162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3691717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4071111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3001067102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4071131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4071211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4071231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4071431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4071448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4075930162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4075931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4075938162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4075953162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4076031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-368553110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3001167102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4076038162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4076053162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4076131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4076138162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4076831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4076887162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4076935162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-301771710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4077035162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4077135162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4077230162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4077235162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5801231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5801248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5801331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5801348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5801431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5801448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3013648102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3016417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3798511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-eseo-3798611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7071202172016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3804511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3815030132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3815060132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7071203172016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3815130132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3815160132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3820606132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-3820617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3685631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3080131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4066317132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4066511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4066611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4066711132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4066811132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4066911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4067117132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4067143132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4067217132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4067243132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3080231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4067317132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4067343132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4067411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4067511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4067611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4067711132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4067811132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4067911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4068343132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4068443132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3080331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4068511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4068531132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4068717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4068817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4077511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4077611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4077911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4078011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4078111132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4078211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3084231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4078310132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4078314132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4078343132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4078410132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4078414132016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-4078843132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4081743132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-4081811132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7705040062016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3683530li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-770504017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3683531li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3683630li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3683631li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3709548li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-3709531li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4071330li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3022131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4071331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-lirio-4071511li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4071611li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4071711li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5714311li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5714331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3022231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5716213li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5716231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5716413li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5716431li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-302233110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-300501110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3074111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3074211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3212986102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-369611710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3005017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3627632102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3628029102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3628043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3667617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3686548102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3686648102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3005056102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3727192102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3727592102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3727692102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3800543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3800643102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3817011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3817111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3820606102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3820617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3846011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3846111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3881042102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3901029102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3901129102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3973017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3973117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4056330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4056331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4078511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-4078611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4080811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4080911102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4081431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4081443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4081514102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4081529102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4081614102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4081629102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7705001112016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4084430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4084431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4192431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4192435102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4192443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4213131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7705001172016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5006206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5006217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5006306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5006317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5006406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5006417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5006906102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5006917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7705001562016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5015431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5015931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5096443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5096543102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5098317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7070001112016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5098417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5465417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5465917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7070001172016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5494406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5494417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5494443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5494606102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5494617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5494643102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5494717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5494906102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-369851710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7070001312016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5494917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5494943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzzenithp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5692317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5692417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3014432102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3014434102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3014435102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-301485510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3020130102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3009948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3065831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3065848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3065931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3065948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3786511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3786531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3786611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3786631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3795017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3795031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3795117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3795131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4056631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4056648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5306248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5306348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5306448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5306948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5309331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5309431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5312411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5314348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5315448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5315948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3017335102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5427417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5559430162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5559467162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5559830162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3017353102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5559867162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5624331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5624348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5624431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5624448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3017435102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5632431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-301745310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5641317162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5641331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5641417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5641431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5642431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3017967102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5642448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5644411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3018067102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5717417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5717431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5717444162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5717917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5717931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5717944162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5800217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5800317162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3019131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5806211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5806217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5806311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5806317162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5806411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-5806417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3019231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3623517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3016530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3019301102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3019314102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3191326102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ag3-aged-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ag3-pol-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ag3-pol-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ag5-aged-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ag5-pol-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ag5-pol-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ag8-aged-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ag8-pol-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ag8-pol-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3191362102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-aml3-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-aml5-blksilver2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-aml5-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-aml10-blksilver2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-aml10-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3191431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-art3-agd-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-art5-agd-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3199135102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-bb5-brz-patina2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3199162102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-bb8-brz-patina2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-br5-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-br8-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cn3-burgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cn6-burgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-crt5-silvergold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3199235102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-crt8-silvergold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-dy5-silvergold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fppm-pol-nckl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fpps-pol-nckl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fp6-pol-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fp9-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3623617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3199262102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hr5-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ll5-ant-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ll8-ant-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-lun5-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-lun8-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7064132702016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-lun5-blksil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-lun8-blksil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-mv5-chrome2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-old-park-ab2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-old-park-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-old-park-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-706414070dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ox62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ox82016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-pm6-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-pm9-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7070802062016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-rbsfa-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-rb5-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-tchsf-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7036801532016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-wm32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-wm62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-wr8-graphite2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7036801732016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feabbeyp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feabbey32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feabbey52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feabbeysf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7036802532016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feannabelle62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feannabelle92016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feannabelle32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fearabesque42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fearabesque32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fearabesquef2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7036802732016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feargentop2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-febellini62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-febellini32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fedrawing-rm42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fedrawing-rm62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fedrawingrmfb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fedrawingrmsfc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fejustine6-isle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fekelham-hall42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fejustinef2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fejustinesf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fekelhall5-uplt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fekelham-hallf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fekelhamhallsf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feleila62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feleila32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feluciab2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feluciasf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-femarcella82016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-femarcella42016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3005006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-femarcellap2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-femarcellasf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feremypb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feremypa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feremyf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fezara42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fezarasf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3305006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7070001012016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7705001062016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkplymouth32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkplymouth62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkplymouth92016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkplymouth4p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkyorktown52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkyorktown92016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzgriffinsfm-c2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzkendra52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzkendrasf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzlagunap2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzlagunasf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7074801312016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzmarquettesf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzmarquette32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzmarquette6a2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzshelby52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-flambeau-fbmignon82016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-flambeau-fbmosaic102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7074801432016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-flambeau-fbremi52016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3005017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3005031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3011255162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3017587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7074801472016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3018731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3208331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3208431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3020087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7074802312016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3035011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3048869162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3048969162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3082217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3202067162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7074802432016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-417771110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3630017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feurbanrwlpa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7074802472016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3606517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3606617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-fppm-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3001206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3013606102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-301640610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3017530162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3018443162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3049111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-300984310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3627532162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3627632162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3667517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3667617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3686548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3686648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3753086162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3753186162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3765017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3765117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3765531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3767086162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3767186162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3767548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3795548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3795648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4019231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4019248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4022811162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4035420162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4035434162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4035435162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4056848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4056893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4057311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4059511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4059917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4060017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4061631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4061648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4061731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4061757162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4061793162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4062631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4062643162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4063417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4068931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4068948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4069031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7289401312016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4069048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4069511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4069517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4069631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4072087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4074411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4074987162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4075087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4104531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4104533162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4104587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4159631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4159831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7017201602016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7017301602016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7017401602016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-7705017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-7705031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-701750160dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3006743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3006843102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3012843102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3020486102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3012504102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3012743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-300944310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-300954310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3009643102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3009743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3667517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3309643102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3018443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-aml3-blksilver2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3020086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-crt18-silgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-crt3-silvergold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-flambeau-fbbon-vivant82016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-flambeau-fbcrown42016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbcrownp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-flambeau-fbdiego42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-flambeau-fbmaiden-voy62016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-febellinip2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-febelliniw32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feclarissa52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feclarissa62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fedrawing-rm52016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-fedrawingrmsfa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fegianna62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fekelhall-dn5lt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-301410610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkmeridianp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkmeridian52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkmonaco52016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-301420610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkmonaco62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkwhitneyp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkwhitney52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-mn5-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-mn6-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7702701432016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-pm3-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzadonis52016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzduryp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-quoizel-qzgriffinsfspn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzlaila62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzshelby42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzsutton-pl62016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7702702432016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-321251716-321251716-3212517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3667531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3085556162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3667531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7068302432016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3667631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4019048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4019417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4055543162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4082838162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4082887162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4082938162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4082987162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4083848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4085556162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4085717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4085731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4092011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4092031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4092111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4092211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4094011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4094111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4096017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4097048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4099031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4177911102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4178386102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4225926162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4225938162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-art5-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-sax8-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5091617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7701301872016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-7702701472016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fp6-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3799586162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feurbanrwlpb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5580486102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5580986102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-light-topps-lt6600792016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-aml15-blksilver2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-aml15-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-art3-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-bb3-brz-patina2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-br3-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-by3-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-by5-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-by8-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cb12-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cb18-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cb3-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cb5-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cb6-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cb8-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ch3-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ch5-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3737043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cw12-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cw18-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cw3-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cw5-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cw6-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-cw8-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-em3-copper2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-em3-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-em5-copper2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-em5-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fbmosaic62016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-fealston32016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-fealston52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-febellini42016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-febesopm-bs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-febesopm-dbz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-febesops-bs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-febesops-dbz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-feclarissa32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fedrawing-rm32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fedrawing-rm92016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-fedrawingrmfa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-fedrawingrmsfb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-fegianna1c2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fegianna42016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fekelhall-dn3lt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feleila1c2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-feluciaf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feluciapa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feluciapc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feluciapd2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feluciape-2tr2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feluminarypa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-417781110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feluminarypb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-femaliap2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-femaliasf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-femalia32016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-femalia62016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-femalia82016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feparkerpm-bs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feparkerpm-db2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feparkerps-bs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feparkerps-db2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-fepickeringlp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-fepickeringlsf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fepickeringl32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fepickeringl52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fepickeringl82016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feremypc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-fesonomavalf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-fesonomavalp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fesonomavalsf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fesonomaval122016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fesonomaval32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fesonomaval62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fesonomaval92016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5211317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-festirlingcasf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-festirlingcas122016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-festirlingcas3p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-festirlingcas62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-festirlingcassf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5211517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feurbanrwl3pe2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feurbanrwlpc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feurbanrwlpd2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feurbanrwlpe2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feurbanrwlpf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feurbanrwlpg2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feurbanrwlph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feurbanrwlpj2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-feurbanrwlpk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fewoodstockpl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fewoodstockpm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-fezarap2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fezara4-l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-fly3sf-brzant2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-fly6sf-brzant2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fpps-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-555333110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fp3-old-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-fp3-pol-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ghp-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ghp-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5099417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5099517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5099917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkameliapm-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkameliapm-dz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkameliapm-kz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkameliapm-pl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkameliapm-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkameliapm-rb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkameliaps-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkameliaps-kz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkbollaf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkbollapa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkbollapb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5427417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkbolla32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkbolla92016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkcellopa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkcellopb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkcello152016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkcello32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkchandon32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkhadleyf-oz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkmayflowerpa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkmayflowerpb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkmayflower92016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkmeridiansf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkmeridian32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkmiddlefield32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkmiddlefield52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkmiddlefield62016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkmiddlefieldp12016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkmiddlefieldp42016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5438231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkmonaco32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkplant10-pz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5438431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkplant7-pl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkplant7-pz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkplymouthisle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkplymouthpa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkplymouthpb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkplymouth152016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkpullmanm-bn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkpullmanm-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkpullmanm-oz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5438931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hktruman32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hktruman52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hktruman92016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkwhitney32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkwhitney92016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkyorktown32016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkzeldapa-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hkzeldapa-vs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkzeldapb-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkzeldapb-vs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkzeldasf-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkzeldasf-vs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkzelda5-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkzelda5-vs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkzelda7-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkzelda7-vs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkzelda8-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hkzelda8-vs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-541251710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5412917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-520931110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-520941110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hqelement-4lt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hqelement-6lt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hqlucerne-4lt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hqlucerne-6lt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5206317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hr3a-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hr3a-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-hr5-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5206417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5207431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-520793110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-362763210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5203317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5203817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-lun3-blksil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-lun3-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-mn3-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-mn3-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-mn3-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-mn5-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-mn5-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-mn6-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-mn6-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-ovf-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-ovf-ivgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ov3-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ov3-ivorygold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ov5-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ov8-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ox42016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-pbfb-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-pbfb-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-pbp-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-pbp-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-pbsfa-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-pbsfa-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-pm3-db2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-pvp-agb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-pvp-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-pvp-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-pvsp-ab2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-pvsp-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-pvsp-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzadonisf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzadonisp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzadonissf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzcalhounf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzchantillysf32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qzchantilly52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qzchantilly92016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzcodypm-bn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzcodypm-zc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzcodyps-bn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzcodyps-zc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzeastvale-isle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzeastvalepm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzeastvaleps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzeastvale32016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzemerypm-is2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzemerypm-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzemeryps-is2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzemeryps-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzemery3p-is2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzemery3p-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzgriffinp-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzgriffinp-c2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzgriffinp-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzgriffinsfman2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzgriffinsfmpn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzgriffinsfs-c2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feaveline32016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzgriffinsfsan2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzkendrapa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzkendrapb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qzkendra32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qzkendra92016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzlagunafl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzlagunafs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qzlaila4a2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qzlaila4b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qzlaila92016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzmadisonmp-is2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzmadisonmp-wt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qzmadisonm5-is2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qzmadisonm5-wt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzmarinep2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzmarine8-l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzmarine8-s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qzmarquette6b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qzmarquette92016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qznewharbor4p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qznewharborp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qznewharborsf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qznolan52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qznolan62016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzozarkfm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzozarkfs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzpennstatm-bn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzpennstatm-wt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzpennstats-bn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-qzpennstats-wt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qztroyp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-qzwilkinsonf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-rb3-ivrygld2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-ry3-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-sax3-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-sax3-blksil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-sax5-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-tchf-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-tchsf-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-wr12-graphite2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-wr18-graphite2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-wr5-graphite2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-wr6-graphite2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3080431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3080487162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3080587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3080531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3750530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-qzsutton-plp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4059711162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4153243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4083431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbanemonep2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbaudubon42016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbbon-vivant32016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbbon-vivant52016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbcrown42016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbfragment-g2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbfragment-gpl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbfragment-gps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbfragment-spl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbfragment-sps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbkristal-luxe62016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbsimone62016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-flambeau-fbsouth-beachp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feadams3p-anl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feadams3p-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feadams4p-anl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feadams4p-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feallier4p-ww2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-feallierf-ww2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feallierp-ww2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feallierpl-lw2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-fearbor-creekf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fearbor-creekp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fearbor-creek32016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fearbor-creek62016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fearbor-creek92016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feaudriepm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feaudrieps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feaveline52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feaveline82016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-febluffton3p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feblufftonmp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fecadence1p-bs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fecadence1p-mb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fecadence2p-bs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fecadence2p-mb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-fecadencef-bs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-fecadencef-dab2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-fediamondf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fediamondpl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fediamondpm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fediamondps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fedrawingrm182016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-feharrowf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feharrowpm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feharrowps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feholloway4p-b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feholloway4p-w2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fehollowaymp-b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fehollowaymp-w2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fehounslowp-bs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fehounslowp-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fehounslowporb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-fehuntleyf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fehuntleyp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fehuntley32016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fehuntley52016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fejoplin3p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fejoplinmp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fejustine6p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-felivingstnpm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-felivingstnps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-femerrillf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-feparkmanf-bs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-feparkmanf-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-feparkmanf-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feparkmanpl-bs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feparkmanpl-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feparkmanpl-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feparkmanps-bs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feparkmanps-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-feparkmanps-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4174311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fetabbypm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-feiss-fetabbyps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-fewoodwardfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-feiss-fewoodwardfm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-383401110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkblakely3p-bn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkblakely3p-kz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkblakelyp-bn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkblakelyp-kz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5116943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkcambridgefa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkcambridgefb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcambridgepl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcambridgeps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkcambridge152016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkcambridge252016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkcambridge62016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcarabelpa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcarabelpb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcarabelpc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcarabelpd2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkcarabelsfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkcarabelsfs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcharlotp-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcharlotp-bc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkcharlotsf-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkcharlotsf-bc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5116493102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkcongres4a-bc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkcongres4a-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkcongres4b-bc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkcongres4b-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkcongres4c-bc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkcongres4c-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcongrespa-bc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcongrespa-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-511699310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcongrespb-bc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcongrespb-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcongrespc-bc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkcongrespc-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkdunhillsf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkdunhill52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkdunhill92016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkfinleyp-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkfinleyp-cm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkfinleyp-oz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkgemmaf-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkgemmaf-vbz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgemmapa-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgemmapa-vbz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgemmapb-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgemmapb-vbz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgemmapc-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgemmapc-vbz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkgentryf-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkgentryf-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkgentryf-pw2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5549393102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgentrypl-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgentrypl-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgentrypl-pw2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgentrypm-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgentrypm-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgentrypm-pw2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgentryps-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgentryps-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkgentryps-pw2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5549493102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkhamptonpa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkhamptonpb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkhamptonpc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkhamptonsf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkhampton42016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkholden4-dz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkholden4-kz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkholden5-dz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkholden5-kz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkkingsley3p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkkingsleysf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkkingsley52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkkingsley92016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hklanzapl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hklanzasf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkmiddlefield42016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkmime3p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkmime4p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkmimesf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hknestpa-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hknestpb-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hknestpc-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hknestsf-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hknest4-isle-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hknest6-isle-sl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5515406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkrigbyp-kz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hksolsticemp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hksolsticep2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hksolstice42016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hksussexsf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hksussex52016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hksussex92016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkwalden3p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkwalden4p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkwaldenf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkwingatepl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkwingatepm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-hinkley-hkwingateps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-520796210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-elstead-hqsienna-pnd2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klahrendalemp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-kichler-klahrendale32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-kichler-klahrendale42016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5311448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-kichler-klaleeka32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-kichler-klaleeka5a2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-kichler-klaleeka5b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klbrinleymp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klbrinley32016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klbrinley62016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klcallapm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klcallaps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klcelestial3p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5311848102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-kichler-klcelestialsf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-kichler-klcelestial62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-kichler-klcity-lights7a2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-kichler-klcity-lights7b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klcrstskyeisle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klcrstskyepa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klcrstskye82016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klfracturepl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klfracturepm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klfractureps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klhattbayl-aco2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klhattbayl-oz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klhattbaym-aco2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klhattbaym-oz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klhattbayxlaco2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klhattbayxloz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klkellerm-ni2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klkellerm-oz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klkellers-ni2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klkellers-oz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-kllaceypl-mb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-kichler-kllaceysf-mb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5308311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-kichler-kllacey5-mb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-kichler-kllacey9-mb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-kllarkinpm-ni2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-kllarkinpm-oz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-kllarkinps-ni2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-kllarkinps-oz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klloomisle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klloompa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klloompb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5308411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klmoxiefpl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klmoxieisle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klmoxieps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-kichler-klmoxiesf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klroswellisle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klroswellpa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klroswellpb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4033643102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klryegates-aco2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klryegates-ap2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsaldana32016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsaldana52016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsaldana82016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsayrepl-ap2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsayrepl-oz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsayrepm-ap2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsayrepm-oz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5309331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsayrepxl-ap2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsayrepxl-oz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsilcoralisle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsilcoralmp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsilcoralpa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-kichler-klsilcoralpb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5309431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5303348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5303448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5303848102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5306048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5306248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5306448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4033687102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-5306948102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-pm9-db2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzadmiral3p-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzadmiral3p-ib2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzadmiralp-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzadmiralp-ib2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3212517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzaldora12016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzaldora3p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzaldora8isle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzalhambrep2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-quoizel-qzashvillesf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-6775117132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3726633162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3214948102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzashville32016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzbellefleurp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzbrownlattpl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzbrownlattpm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzbrownlattps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-quoizel-qzbrownlattsf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzcarnegie32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzcarnegie62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzcarnegie82016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzchastainp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzchelsealoftp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzchelsealoft42016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzconfettipl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzconfettipm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzconfettips2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-quoizel-qzconfettisf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3020511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzfortquinn42016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzfortquinn82016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzgothamp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzgotham42016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3210217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzinglenookmp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzinglenookpa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzinglenookpb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-quoizel-qzinglenooksf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzinglenookisle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3213848102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-quoizel-qzkamif2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzkamip2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzkylemp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-quoizel-qzkylesf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzkyle162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzkyle32016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzkyle5isle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzkyle62016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qzkyle92016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzlagunamp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3211517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qznewharborisle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4159530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-321155310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-quoizel-qzpennstatf-bn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-quoizel-qzpennstatf-wt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3211617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzstephen3p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzstephenmp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzstewart-bn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qzstewart-wt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3211653102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qztheaterrow6is2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qztheaterrow6wt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3215560102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qztrilogy3p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-quoizel-qztrilogymp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-quoizel-qztrilogysfm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-quoizel-qztrilogysfs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-quoizel-qztrilogy32016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-elstead-tchf-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3215660102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4089838162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4089887162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4090806162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4090893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4089833162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-6780917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3726687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-321426710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4178818102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3627517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3214848102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3180331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3180431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4090731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4090732162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4090733162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-4090738162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3676017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-3261348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-philips-4385438162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-philips-3627593162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-401861710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-3622617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4184811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4008717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4182317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4159331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4159630102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4159631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4159830102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4159831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3348017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-3348117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-4031831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-403353110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-403353410dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-4159931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-hinkley-hkmayflower3sf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-massive-576208710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-402191713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-402733013dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-370661113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-eseo-372100413dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-372961110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-402283310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-lirio-4022017lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-potolochnyy-lirio-5707330lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-388268610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-365365310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-416418710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-418091110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-401617010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-402473510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-417561110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-400710610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-388055510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-403928610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-388454310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-390158610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-eseo-3720617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podves-massive-417838610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-sax5-blksil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-sax8-blksil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4475031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-430411110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-430553110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4313111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431313110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4313330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4313331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3735943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3750411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3641961132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3749411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3742911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3703417132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3754948132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4499130132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3732911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-429383013dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-429383113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3699431132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3742417132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3748430132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3748417132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3612917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3612906132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4314643132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4314631132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3723443132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3707917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3707986132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3741986132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3749443132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3702930132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4320147132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4320110132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3729486132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-6601131132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-6601193132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-6701117132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-6700917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-6711606132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-6711617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3743405132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3743411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4314330132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4314430132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4309730132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4309731132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4309732132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4309743132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4314730132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4314732132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4314743132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4314748132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4317717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4317917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4318017132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4317517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4317617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-430693113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4306950132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-430933013dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4309331132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4309350132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-6660814132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-6661714132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-6661743132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3672417lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3671911li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3740930102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3675411li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-6780106132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3675417li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3690411li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3690930li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3690960li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3691430lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3691460lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3692431li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3692432li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3736430li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3736431li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3734448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4311011li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4311017li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4315031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4315032li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4315131li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4315132li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-5701148lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-5703148li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-5703131li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-5704731lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6670130162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6670187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6670230162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6670287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6670330162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6670387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-5706730li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-5706731lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-5706732li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3759431li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3762330li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3641406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4319987162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4321111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4321131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3641417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-1241682432016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-1241481432016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-662201710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-664109110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431863010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431863110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6731530162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4475030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3865455102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-388095510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-388394310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-823570154dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-839790143dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-8488930552016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3689431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4302253102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-430573110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-433276010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-842406135dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-842406184dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3899917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-366493210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-366593210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3684932102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-368493310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-430313210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-430315310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-1287001872016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6641087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6670033102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6670053102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6670087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6710632102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6710635102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6710653102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6711133102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6711153102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6711160102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431000617dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431001717dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431010617dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431013017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431021717dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4310230172016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431031717dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431033017dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431111817dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431121817dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4311304172016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431138617dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431140417dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431148617dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431150617dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-366494910dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-430314910dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-385148610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-385194310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-845090186dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-848903555dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-362391710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-367691710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-367794810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-368441710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-368544810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3687417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3688917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-385341710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-385891710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3859411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-430223210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4306455102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-367943310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-367943410dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-385098710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-453155310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3845430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431141117dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4312130172016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4312466172016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4312566172016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3672918lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-367993013dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3678417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4305631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6740087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-8486301012016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-367993113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-369591713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3701443132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3701917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-370243113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3704411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-371344413dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3714434132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3719417132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3739487132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-430243113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4306934132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-430933413dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4309638132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-431713113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-431741713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-6711417132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3722411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-386445510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4591230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4591231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-459133110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-459138710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-459338710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4593487102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4322130102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4322256102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4322333102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3769406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3776455102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4320830102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4320831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4321043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4321087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6661430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6661487102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-128325128dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6661520102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6661546102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6661532102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-666168710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-666163010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-666162810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6661306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-385848610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3757931li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4324031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3712443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4324093li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4315511li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3720917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3719917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3759917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3758911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3781417132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-368841710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3780848132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3725931132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3725953132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-372691713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3726986132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3789943132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3616930132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3884443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4315930132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4315931132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3710930132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3780426132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3780431132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3784486132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3727492132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4314943132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4314975132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4315843132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4315875132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4315430132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4315630132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4315743132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4315230132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4315331132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4317030132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4316511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4323206132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4323211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4323217132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4323306132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4323311132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4323317132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4222130162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3723948132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6907911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6907930162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6907931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6905248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6906330162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6906387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6907530162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6907587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6907630162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6907687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3753486102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3650943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4222131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-3674418li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-368391710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3741443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3880455102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-666071713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3717462102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6731991102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6731987102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6670687102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6670630102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6662033102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6662032102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6662028102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3697486102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3767486102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-6780117132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3770406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3789406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3795417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3795431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3796448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3798443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3637943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4323811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4323635102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4323634102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4323620102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4323548102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4323538102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4323531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4321443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4321431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4321430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4313348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3695486102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-431982610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4323893102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6916260ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6916360ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6916231ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6916331ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3756443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4323130132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4323131132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4323132132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3720917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3719917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3723948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3750411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3722711162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3610911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4593830162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4593831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3725931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3725953162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3726917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3726986162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3612906162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3612917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3780426162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3780431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3741986162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6701017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-666051110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6720117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3715432102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6623033102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6623053102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-0120021302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-120021872016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6731230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6731231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3659411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3675917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-662303310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6623035102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3896443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-662305310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4305431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4532932102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6720053102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6720093102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6620287152016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6620387102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6620811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6646031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6646087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6623634102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6623635102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-8424061792016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-8471921932016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6623687102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6710733102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6710735102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6671230162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6671248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6710753102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6671131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6671148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6671030162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6671048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6670830162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6670831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6670848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-1292301532016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-1292301872016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-129230191dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-664408710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-664409110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-128320133dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-128320153dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3803430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3803431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-128320191dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4349011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-1283001872016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3801911102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4324717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4324793102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4325231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-1283101302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4325248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4325028102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4325031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4325055102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-1283101312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4324931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4324933102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4324953102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-8244221302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3804431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3806438102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3806487102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-8244221552016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3815406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3815417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4325330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4325331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4325430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-8244221872016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4370675102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3904943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-8324421302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-8324421352016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-8324421602016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-8324421872016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6740830102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6740887102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6780317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6780328102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6780330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6780331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-0122921062016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-0122921172016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-664614310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3784917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3784943132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3796930132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-671124310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3800443132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3800943132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7001830ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7001831ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7099730ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7099760ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7099860ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7099830ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7099930ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7099960ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4326030li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4326048li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3769811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4326430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4326431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6740917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6740930102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6740987102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6741053102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6741096102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6741087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6741153102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6741196102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6741187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6732930102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6732932102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6732996102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6720111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3736631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3736648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-5794917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-5794931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4076706162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4076717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4080172162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4080174162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4080272162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4080274162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4440156162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3753838132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4440256162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3804911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3814930132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3814960132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3820906132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-3820917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4325111132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4325131132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-eseo-4326743132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3800943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3820906102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3820917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3846411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3795417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3795431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3698917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4323917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6922531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6922587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6710933152016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-amltl-blksil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-amltl-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-lltl-ant-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-ovtl-ivorygold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luialba-gra2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luijob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luilisboa-pw2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luimorris-small2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luioscar-bz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiottoman2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luithistle-sil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luisolomon-gold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiveronica-md2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiveronica-sm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzlagunatl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbnettlelx-gfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbnettleluxgtl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3667917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3753486162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3767486162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4313331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4325231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4325248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6673130162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6673187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6673230162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6673287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6690930162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6690987162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6720053162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6720093162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-363041710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbrodriguetl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbtechetl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiaphrodite-sm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiblkbirds-trd2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luigold-thistle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luilibero-gold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luilibero-silv2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiliona2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luilisboa-wht2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luivictor-sm-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3667931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-3684960162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4312617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4326656162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4326687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-5323131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-5323132162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-5323133162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-5323135162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-5323199162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6741331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6741332162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6741333162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6741335162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6741399162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-667073016-led2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-667078716-led2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-light-topps-lt6000092016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-light-topps-lt6010092016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-light-topps-lt6020092016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-agtl-aged-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-agtl-pol-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-agtl-pol-nickel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-arttl-agd-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-arttl-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3667917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-bytla-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-fbdominique-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-fbla-fleur-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-feanora-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-feansari-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-feaugustine-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-fedavidson-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-feelizabetta-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-fegrandeur-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-felex-tl-bb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-felex-tl-bs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-femarcellatl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-feoakcastle-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-feold-indust-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-fepark-ridge-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-fesilvershoretl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-festaterm-bl-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-festaterm-bl-bb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-festaterm-tl-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-festaterm-tl-bb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-feurbanrwltl12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-fewestwood-tl-a2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-fewestwood-tl-b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-flytl2-brzant2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3737443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqascent-tl-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6922535162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqascent-tl-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqascent-tl-wht2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqbalance-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqbubble-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqcontour-lime2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqcontour-wht2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqflow-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqorb-clear2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqorb-lime2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqpop-orange2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqpop-white2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqripple-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqripple-wht2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqspin-grey2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-hqspin-white2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luialba-cream2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luialba-rouge2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luialexander2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiantonia2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiaphrodite-lg2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiautumn-leaf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luibabushka2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luibacari-large2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luibelinda2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luibird-crackle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiblack-swirl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiblkbirds-tjl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiblue-g-jar2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiblue-globe2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiblue-hex2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiblue-trad-wp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luibrsi-petals2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luicaesar-gold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luicaesar-sil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luicanteloupe-l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luicanteloupe-s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiceladon2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luichildren2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiclara2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luicolorado-sm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luicolumbus-spi2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luicolumbus-tal2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiconrad2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luicordelia2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luidemeter2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luietched-birds2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiforget-me2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luigrace2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luigreen-globe2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luigreen-retro2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luihorizon2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiivory-cra-lg2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiivory-cra-sm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luijade-gourd2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luilaguna-large2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luilaguna-small2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luilapis-gourd2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luileaves-brgl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luilustre-brown2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luimars2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luimuse-grey2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luimuse-turqse2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luineptune2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiolhar2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luionyx-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luionyx-red2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiosiris2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiparrot2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luipeacock2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luipearl-large2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luipearl-small2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luipeonies-trad2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luipink-blossom2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luipink-carn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luipisa2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiposeidon2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luired-swirl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luirib-pumpkin2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiserena-large2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiseychelles2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luisimona-nero2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luisolomon-silv2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luispinnaker-bz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luispinnaker-pw2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luitall-blue-wp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luiteal-leaves2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luivalentina2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luivictor-lg-cr2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luivictor-lg-rd2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luivictor-sm-cr2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luntl-blksil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luntl-bronze2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-pmtl-db2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-pmtl-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-pvtl-ab2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-pvtl-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-pvtl-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-430983210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfboston2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfbrooklyn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfcharleston2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfchattanooga2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfcincinnati2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfcity-hall2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfdetroit2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfempire2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfgatsby-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfgatsby-bb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfhampton2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sflafayette2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sflexington2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sflincoln2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfmaine2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfmanhattan2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfportland2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4215331132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfpresidential2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfroosevelt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfrye2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfstuyvesant2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfsyracuse-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfsyracuse-bb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfwaldorf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfwashington-ab2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-sfwashington-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4326743102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6720443162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-crusader-tl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbanemonetl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbbienvilletl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbbienville-mtl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbbirdlandtl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbcaryatid-g2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbcaryatid-s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbfleur-de-lis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbkristaltl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbla-fleurette2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbnettletl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbnettleluxstl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-flambeau-fbpompadourtl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-franklin-cream2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-franklin-green2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-franklin-grey2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-franklin-red2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3834411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiaphrodite-small2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiarum-lily2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luibacari-lrg2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luibacari-sm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiblack-tj2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiblue-flower2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiblue-tj2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luicolorado-lg2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luicolumbus-rnd2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luigold-birds2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luigold-flower2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luileaves-green2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luimorris-large2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiorange-flo2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luirose2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiround-glass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luisil-thistle2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiteal-flowers2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiveronica-med2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-luis-collection-luiyellow-flo2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzalhambretl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzamphora2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzardentl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzashvilletl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzbelletl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzbellefleurtl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzbluefield2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzchastaintl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzclassiccrftl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzconfettitl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzdennison-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzdennison-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzfintontl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzharlandtl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzindustl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzinglenooktl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzjenkinstl-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzkamitl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzkingtl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzkyletl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzlarissatl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzlynchtl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzmonteverde2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qznicolls2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzpalmettatl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzparliamenttl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzrigging2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzrubytl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzsouthwaytl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzspencertl-bn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzspencertl-wt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzstephentl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzthompsontlab2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzthompsontlbn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qztrihearttla2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-quoizel-qzwhitneytl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7002331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4330031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4350031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-lirio-4350093li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4313330162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7002330162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-3650406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6643487102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6643491102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-664349310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-430543110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-430563110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-674008710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-388045510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-848630101dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-367841710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-664603110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-664608710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-elstead-luibacari-small2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-4499211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-4499230162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-4499231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6912204ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6912214ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6912230ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6912231ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914355ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4215348132016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914360ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914365ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914367ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914387ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914630ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914648ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914730ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914748ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914830ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914848ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914930ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6914948ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915011ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915091ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-800442ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6912455ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6910104ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6910114ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6910131ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6910130ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6910153ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6910196ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6910832ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6910835ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6910860ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6911355ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6911387ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6911831ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6912528phdis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6913087ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6911655ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6913255ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6913287ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6914104ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6914114ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6914130ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6914131ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6914153ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6914196ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915160ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915231ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915360ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915411ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6912535phdis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915130ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915887ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915587ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6912855ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6911060ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6916031ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6912660ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6917155ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915004ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6917548ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6917548pu2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6917648ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6917530ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6917630ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6917630pu2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6916660ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6916665ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6917167ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6917193ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6917130ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6917160ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915014ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915030ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6915031ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6910965ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6918460ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6950030ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6950060ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6950230ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6950260ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6918360ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6918560ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6918660ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6918760ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6918860ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6910860og2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6913360ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6918914ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6918930ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6918931ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6919014ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6919030ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6919031ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6919114ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6919131ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6919214ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-massive-6919231ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7001830pu2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7001831pu2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7001930ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7001931ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7007531ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7007631ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-light-topps-lt820302016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-light-topps-lt820392016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-light-topps-lt830102016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-light-topps-lt830122016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-light-topps-lt830152016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-light-topps-lt830202016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-light-topps-lt840192016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7098087ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7016655ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7097855ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7097887ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7097955ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7097987ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-7098055ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-light-topps-lt840492016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-light-topps-lt840592016-10-28Weekly0.9http://www.linija-svitla.ua/product/svetilnik-gadzhet-philips-6910965phdis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6661530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-philips-3409411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-philips-3413111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-331721110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-3317611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-philips-3414311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-philips-3409311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-philips-3431211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-3402011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-3402111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-3402211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-3408211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-3408311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-3409311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-3409411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-3403017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-3409217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-philips-3414211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podsvetka-massive-3407011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4211917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4296417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4206917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4207017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4207117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4218417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-7909422172016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-7909722172016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-993921172016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-99392130dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4208317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4208417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4295930102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-429594310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3735843102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3750311132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4221817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3749311132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3742811132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3703317132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4220617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4217911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3714334132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3744611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3610811132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3754848132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4215743132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4215748132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4296030132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-459383013dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-459383113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3699331132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3742317132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3748330132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3748317132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3612817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3612806132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4214743132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4214731132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-372334313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3707817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3707886132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3741886132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3749343132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3702830132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3748886132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4230731132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4230755132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4213506132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4213511132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3743313132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3743317132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4211817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4213717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4213917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3701343132016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-8324421342016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4218038132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4213331132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4213338132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-429583110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4533587102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-453378610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3697830102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3670817lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3670848lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3672317lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3740830102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3673348li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3675311li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3675317li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3690311li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3690830li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3690860li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3691330lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3691360lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3736330li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3736331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4211011li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4211017li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4214831li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4214848li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-5701648li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-5702648lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-5704631lidis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3735331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3735387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3762430li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3641306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4215148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4219987162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3641317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-923581432016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-93282247dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-361384710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-429761710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-421781715dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4294311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-388434310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3678317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3722311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4211931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-429643110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3664832102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3665832102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3664849102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-796800239dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-996122172016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3653832102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3653853102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-367581710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-367681710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-368534810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-368583110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3685862102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3687317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3688817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-367933310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-367933410dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-369581713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3701817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-370233113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3713344132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3719317132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3739387132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-421713113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-421813113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4218238132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-678141713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-929702432016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4206943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4207006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-7909422012016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-7909722062016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-993921062016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3765317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-420830610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4220931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4220811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4208406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3769306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3767386102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-6765306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3688317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-3757831li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4215530li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4215531li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4221031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4223031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4223048li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4224031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4224093li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3720817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3719817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3759817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3758811132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3781811132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3780948132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-5639212132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-5639211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-5639217132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-372583113dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-372585313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3726817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-372688613dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3789843132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3625330132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4215930132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4215931132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3710830132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3780326132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3780331132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3727392132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4222606132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4222617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4222643132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4222706132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4222717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4222517132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3883843102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4222817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4254911132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4254917132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4221611132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4221617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4208117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4221717132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4222030162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4222031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-6906630162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-6906687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-372384813dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-377781713dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-6906231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-6906287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3753386102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3683817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4207717152016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4215148102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3741343102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-093282247dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-0993921302016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3717362102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3767848102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3789306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-375134810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3799886102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4264311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4223293102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4223238102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4220943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4219643102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4219617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4219217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4218406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4207106102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3695386102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4219826102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3720817162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3719817162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3723848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3777817162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3750311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3610811162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4293830162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4293831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3725831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3725853162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3748317162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3748330162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3726817162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3726886162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3612806162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3612817162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3780326162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3780331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3741886162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4254911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4254917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4208917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-677501710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-676551110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-90021302016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-90021872016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-931122352016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-931122732016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-934022172016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3621317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3677848102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4203087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4204817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4204917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-6755017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-6755117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-790978206dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-6670930162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-6670931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-6670948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3805311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3739811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3803330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3803331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3801811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4224931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4224933102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4224953102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3804331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3806338102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3806387102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3815306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3815317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4225330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3904843102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-0092921062016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-92921172016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3784817132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3784843132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3800343132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3800843132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3796830132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4225030li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4225048li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4225131li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4225130li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4225132li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4225134li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-lirio-4225135li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4281111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4279726162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4279786162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-5793131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-5793148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3691811162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3691817162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3814830132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-3814860132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4224330132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4224331132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-eseo-4226243132016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3846311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4207717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4223830102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-4223831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-7909422062016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3623817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3667817162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3767386162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3630317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4208917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4211917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4220811162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-3667831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4203231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4225826162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4225838162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4226130162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4226133162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-philips-4226187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-fbla-fleurfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-feanora-fl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-febroderick-tch2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-fedavidson-fl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-fegibson-fl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-fegibson-swfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-femarcellafl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-feopera-tch2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-festaterm-fl-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-festaterm-fl-bb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-feurbanrwlfl12016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3737343102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-hqascent-fl-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-hqascent-fl-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-hqascent-fl-wht2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-hqbalance-fl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-hqbubble-fl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-hqflow-fl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-pbfl-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-pbfl-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-pbul-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-pbul-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-420983210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-pvfl-ab2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-pvfl-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-pvfl-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-qzlagunafla2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-qzlagunaflb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-sfarlington-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-sfarlington-bb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-tchul-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-flambeau-fbanemonefl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-flambeau-fbnettle-gfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-flambeau-fbnettlelx-sfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-flambeau-fbnettle-sfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-flambeau-fbsouthbeachfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-feiss-felincolndalefl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-3750830102016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-383431110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzbellefl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzfintonfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzinglenookfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzkamiul2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzkingfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzlarissafl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzpalmettafl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzsouthwayfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzspencerfl-bn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzspencerfl-wt2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzthompsonflab2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzthompsonflbn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-quoizel-qzwhitneyfl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-elstead-tchul-blkgold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-26564522016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-367784810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/torsher-massive-420811710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5955017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5955031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5955217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5955231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5955317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5955331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5930017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5930217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5930317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5930417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5956011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5956211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5956311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5977017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-597703110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-597801710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5978031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5904017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-590451710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5941017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5942017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5953017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5953517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5950048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5950248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5950448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-593400650dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-593401750dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5935017502016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5936017502016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5951530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5951560102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5951567102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-0025063172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-25966172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5976311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-7281023172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5939301102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5939306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5939311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5939317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5939331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5946317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5947317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5932306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5932311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5932317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5793331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5794017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5932331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5932348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5933301102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5933306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5933311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5933317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5933331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5979617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5979631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5979917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5979931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5952517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5952531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5978517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5978617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5979017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5979117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5615048132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5615448132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5615648132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5551048132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5551248132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5551348132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5551448132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5555048132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5555248132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5555348132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5555448132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5555031132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5555231132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5555331132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5555431132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5637011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5637211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5637311132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5637411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5593017132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5593217132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5593317132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5593417132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5593617132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5542011132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5542411132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5542211132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5542311132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-563501493dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5635214132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5635314132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5635414132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5635043932016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5635243132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-563534313dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-eseo-5635443132016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5790287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5790387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5790487162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5791231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5791331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5791431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792531562016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792548562016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-lirio-5711031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-lirio-5711048li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-lirio-5711231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-lirio-5711248li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-lirio-5711331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-lirio-5711431li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-lirio-5711448li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-lirio-5711348li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5793031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5793231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5794017962016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5794031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5794031962016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5794217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5794231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5794417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5794431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-1317511dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5494987152016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-26052387dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-407725732016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-41656391dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-593003110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-500188710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-500538710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-500543110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-500548710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-549063515dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-549065315dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-595433115dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-2548331dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5902331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-590333110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-542101710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-542111710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-542121710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5421317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-542141710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-552301710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-552311710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-552321710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-552331710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-542403210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-542403510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-542405310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5424432102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5424435102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5424453102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5424932102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5424935102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5424953102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-542801710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5428217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-542831710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-542841710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-544303310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-544383310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-544393310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-551200610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-551260610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-551280610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5512906102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554003210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554023210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554043210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554083210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5932301102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-808025352016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-808025532016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-576308710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-562523210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-562533210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-562543210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5970648102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-552371710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-552648610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-553840410dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-542834810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-542844810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-543533110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-551230610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-553544810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-500401710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-593801710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5938031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5941031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5942031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5945031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-594733110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-165068710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-594633110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5559067102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5559267102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5559467102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5559867102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5020011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5020411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5020911102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5123117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5123417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5123917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5123017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-0279363312016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-0492061312016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-0492261312016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-0492462312016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5561005102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5561205102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5561405102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5561805102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5019043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5019443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5019943102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5549229102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5549429102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5595586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5595786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5595986102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5595886102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5312011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5312411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5312211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5991917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5992017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5960031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5960231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5904217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5959056102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5976411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5961017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-962017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5632031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5632231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5632431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5559030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5559230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5559430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5559830102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5549029102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-3765217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5540253102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5700230li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5713031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5713231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5715431li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5715448li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5713331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt233672016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt234192016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5713431li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5714011li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5714031li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5714211li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5715348li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5715331li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5715248li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5715231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5714231li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5714511li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5714531li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5714611li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5714631li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5795531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797148162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5797031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5796231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6907731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6907748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6907831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6907848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5962017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-593331715dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-3215931102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-3215948102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5992417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5992217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5991517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5970817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5970631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5951031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5951017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5945317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5938317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5933348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5933031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5933017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-593230615dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5932317152016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5939348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5970031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5799631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5799648162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5798731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5798748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5798831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5798848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5798917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5798931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5799117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5799131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5799731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5799748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5798331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5798348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5799331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5799348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5799517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5799531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5992517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-3066531li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-3066548li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-0179650472016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5542011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5542211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5542311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5542411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5573030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5573230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5573330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5573430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5573031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5573231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5573331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5573431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-3160748162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-3160848162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-3161011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-3161017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-3161031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5316031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5316048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5316231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5316248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5908011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5908031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5903011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5903017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5903031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5713030li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5713230li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5713330li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-lirio-5713430li2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-0025063312016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-1709917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-1712947102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5905017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5905517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5980317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5981317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5981331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-1686131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-1686187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5633030162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5633031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5633230162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5633231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5633330162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5633331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5904017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5908017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5930017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5930217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5930317162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5930417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5946317162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5947317162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5951017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5951031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5545355102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5951530162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5951560162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5951567162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5956011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5956211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5956311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5983031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5983048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5985031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5985048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5985531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5985548162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6672017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6672031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6672117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6672131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6672231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6672248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6672417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt211802016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt211302016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt211702016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt211172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt211872016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt211372016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt211772016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt212172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt212872016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt212372016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt212772016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt216172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt216872016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt216372016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt216772016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt221172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt221272016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt221372016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt221182016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt221282016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt221382016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt223172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt223872016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt223372016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt223672016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt224192016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt224892016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt224792016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt224692016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt222102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt222202016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt222302016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt222172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt222272016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt222372016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt226172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt226272016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt226372016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt226472016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt225102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt225202016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt225302016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt225402016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt225172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt225272016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt225372016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt225472016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt227102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt227202016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt227302016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt227402016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt227182016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt227282016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt227382016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt227482016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5313048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5313248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5313448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5565231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5565431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5970117162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5970417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt111002016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt111072016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt111302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt111372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt111502016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt111572016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt112372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt112302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt112502016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt112572016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt113002016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt113072016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt121302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt121372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt122302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt122372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt123302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt123372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt129302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt129372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt124102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt124172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt125102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt125172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt126102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt126172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt128102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt128182016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt129102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt129182016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt128902016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt128982016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt129902016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt129982016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt131172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt131302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt131372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt132102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt132172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt132192016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt132202016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt132272016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt132302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt132372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt132392016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt132402016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt132472016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt133102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt133172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt133302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt133372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt139102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt139172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt139302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt139372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt132182016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt133182016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt137102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt137182016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt136202016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt136282016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt135302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt135382016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt134382016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt134392016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt142102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt142172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt142192016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt143102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt143172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt143192016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554585510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt144302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt144372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt144392016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt152102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt152172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt153102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt153172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt154102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt154172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt810072016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt801072016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt890302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt114102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt114172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt114302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt114372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt115102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt115172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt115302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt115372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt118102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt118172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt118302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt118372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt119102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt119172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt113602016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt113672016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt121392016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt121492016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt122392016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt122492016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12330b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12337b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt123392016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt123492016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt125302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt125372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt126302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt126372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt128302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt128382016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt129702016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt129782016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt133162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt133272016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt133402016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt133472016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13310b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13317b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13320b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13327b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13330b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13337b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13340b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13347b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13318b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-3215931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5222011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5303248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5309348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5309448162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5320031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5323031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5323032162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5323033162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5323035162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5323099162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5408017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5644231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5644431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5648031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5910031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5910087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5927331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5990217162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6606331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-6606348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5633230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5303048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5309048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5623048162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5623248162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5644031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5633231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt801092016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5633330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5633331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-544403010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-544403110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5444230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt117172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt117302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt117372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt1191042016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt1191742016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5444231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt1101042016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt1101742016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12535102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12535172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12535302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12535372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12551102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12551172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12551302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12551372016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5444330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12435102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12435172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12435302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12435372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12450102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12450172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12450302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt12450372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt131202016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt131272016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5444331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt131402016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt131472016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13851102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13851172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13851302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13851372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt13959102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt201102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt201802016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt201302016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5632030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt201702016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt201172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt201872016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt201372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt201772016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt231802016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt801082016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt821172016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt821372016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5632230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt821192016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt821392016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt893302016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt893372016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt880112016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt880132016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt880162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt880172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5632330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt888112016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt888362016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt889162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt889172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt231702016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt231602016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5632430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt231172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt231872016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt231772016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt231672016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt233102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt233802016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt233702016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt233602016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt233172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt233872016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-562604810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt233772016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt234892016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt234792016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt234692016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt239172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt239272016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt239372016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt239472016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-562624810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt239192016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt239292016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt239392016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-light-topps-lt239492016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5626348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5626448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5623048102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5623248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5623348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5623448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-562844810dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5552248102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5552348102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5552448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-544921710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-544941710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5449917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-0251021172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-0251425172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-0251622172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-0251426172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-251523172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-0251824172016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5521270102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5521370102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5521470102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5203917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-520421710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-520431710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5204717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-500901710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-500911710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5009217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-500941710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-500991710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5111017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5111217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5111317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5111417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-520703310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-520713310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-520743310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-520793310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5545055102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554525510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-elstead-qzeastvale4-bar2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554005310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554045310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554085310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554003510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554023510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554043510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-554083510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-562703310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5627433102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5627933102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5627020102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5627420102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5627920102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5424067102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5424467102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5424967102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5984348162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5984331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-41406131dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-41406231dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-414563312016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-414764312016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5214043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5214343102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5214443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5442043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5442243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5442443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5521074102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5521274102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5521374102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5521474102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-544900610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5449206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-544940610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-544990610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-520600610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5206106102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5206206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5206306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5206406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5203006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5203106102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5203206102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5203306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5203806102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5213043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5213243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5213443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5116043102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5116243102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-massive-5116443102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5902317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5902817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5902831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5903317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5903817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5903831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5325026162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5325029162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt2902092016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-light-topps-lt2901092016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5327031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5323030162016-10-28Weekly0.9http://www.linija-svitla.ua/product/spot-philips-5324006162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5990211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5990231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-3344017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5970006102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5970017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5970117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5970217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5970448102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-593934810adis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1618487102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1618587102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-0172601932016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-0172701932016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-0172801932016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-162128710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1621387102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-171228710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1712487102016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-massive-171409910dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1619147102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1619247102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-0190701472016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-0190801472016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-0190901472016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1612047102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1612147102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1612247102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1538531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1616747102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1616847102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1616947102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-160894710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1707147102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1710147102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1710247102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1710347102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1715047102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1715147102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1670147102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-167219310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1670993102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-167109310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-167119310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-0130201302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-0130201312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-0146501302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-0146501312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1709031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1709087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1709131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1709187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1702187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1702193102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1710587102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1710593102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-170573010dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1706887102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1706987102016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-massive-1702047102016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-massive-170744710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-massive-1707647102016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-massive-7142801302016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-massive-1706717102016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-massive-1707947102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1517042102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1538630102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1517242102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1517342102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1517542102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1517642102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1520186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1520286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1520586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1520686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1522186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1522286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1522586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1522686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1519086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1519286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1519386102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1519586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1538231102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-152805410dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1521142102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1521342102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1521542102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1521642102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1526142102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1526342102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1526642102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-151404510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1514145102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1514345102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1514545102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-162001302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-162101302016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-162201302016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-162301302016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-162401302016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-162403302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1524145102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1524545102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1503045102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1503145102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1503245102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1503345102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1503545102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1503645102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1502042102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1502142102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1502242102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1502342102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1502442102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1502542102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1502642102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1502054102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1502154102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1502254102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1502354102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1502654102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1502454102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1502554102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-7142101302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7142601302016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-7142703302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-0130401302016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-7142401302016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-7142701302016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-7142101312016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-7142401312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7142501312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7142601312016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-714270131dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-7142703312016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1618942102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1713142102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1710386102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1711804102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1715754102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1600731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1600765102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1600831102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1600865102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1538330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7182501312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7182501652016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7141001302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7141001312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7141601302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7141601312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7490021302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7490021872016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7490221302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7490221312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7494321302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7494321312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7494621302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7494621312016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-massive-175113410dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-massive-7490421302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-8709812302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-8709812312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1623247102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1702347102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1702547102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1716647102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1717030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1717087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1717787102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1717887102016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-massive-1708047102016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-massive-171624710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-massive-1717948102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1528254102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-152835410dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-152318610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1523286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-152368610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-152514510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1527086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1527786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1527886102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-162368610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1715642102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1680087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-168009316dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1680187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1680193162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1680287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-0130401312016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1680293162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1680687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1680731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1680787162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1538331102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1680847162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1680893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1680947162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1681087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1681093162016-10-28Weekly0.9http://www.linija-svitla.ua/product/vreznoy-svetilnik-philips-1681131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/vreznoy-svetilnik-philips-1681187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-191101472016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-150854510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-150924510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-massive-1603599102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-160639910dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-160954710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-161564715dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-165024710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-165088710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-165118710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-176401472016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1606899102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-714419930dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-713949999dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-715099930dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-14230145dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-168501882016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-176501932016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1670047102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-167024710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1670647102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1670787102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1670987102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-167108710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1671187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-167158710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1671687102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-162094710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1621147102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-162224710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1622347102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1622447102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1619373152016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-161957315dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1670347102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1670887102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-150403422016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-17120187dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-171201932016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-17140187dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-171401932016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-17270147dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-151135410dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1609047102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1609147102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-170229310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1710847102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-161658710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-150201422016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1625287102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1625187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1625193102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1625293102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1624893102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1624887102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1538530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1718547102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1717306102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1718386102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1718486102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1533254102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1533554102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1533654102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1533054102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1533154102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1533854102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1626054102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1626154102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1627086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1627186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-150301422016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7490221872016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1532386102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1525045102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-8165701302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-8165701312016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-massive-1707447502016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1690247162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1690347162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1690193162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1690187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1690093162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1690087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1691093162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1690993162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1690893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1691087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1690987162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1690887162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1690787162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1690687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1690587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1690487162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-161804715dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1713186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1620047152016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1620147152016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-161824715dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1526542102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1535030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1535230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1535530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1535630102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1536042102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1536142102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1536242102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1536542102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1536642102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1538031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1538230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1538730102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1539042102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1539054102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1539242102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1539254102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1540186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1540386102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1621947102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1622047102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1623347102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1623447102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1631493102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1631593102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1631693102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1631793102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1631847102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1632093102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1632193102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1701493102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1713087102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1713093102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1717347102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1717447102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1718487102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1718730102016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-massive-1718930102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1720147102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1720287102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1720387102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1720893102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1721042102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1721186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1721747102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1721847102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-8162601872016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1721947102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7490021312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-150101422016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-171301872016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-176301472016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-178701472016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-0181601452016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1514245102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1525142102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1607199102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1612447152016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1612547152016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1620247152016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-massive-1707287102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-7116099302016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-7120740302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1633347102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1633447102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1633547102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1633647102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1634347102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1634447102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1634547102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1723430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1723487102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1723786102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1542042102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1542142102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1542242102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1542342102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1542542102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1542642102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1542842102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1542942102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1541030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1541230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1545086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1545186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1545286102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1545686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1723654102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1723686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1722418102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1638430102016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-massive-1638530102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1681893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1691387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1691731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1691747162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1691793162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1692847162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-0172601472016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-0181601422016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1502330102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1536842102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1539142102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1544086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1544386102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1544586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1544686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1701447102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1726347102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1726147102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7142201302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1718293162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1720193162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1720930162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1720947162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1721447162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1718287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1721547162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1723542162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1723593162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1724887162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1724893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1724793162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1625387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1540286162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1625487162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1625493162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1640593162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1640693162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725293162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725347162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725447162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1641247162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1641347162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725842162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725493162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1641147162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1724906162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1724942162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1724706162016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-philips-1726547162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1720147162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1641447162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1710143162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1721647162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725742162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725752162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725845162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725906162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1726042162016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-massive-1711230102016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-philips-0176793162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-0172701472016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-0182601472016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-0191201472016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1502754102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1615747102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1631447102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1631547102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1632647102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1702547182016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1702593182016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1711647102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1724287102016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-massive-1724487102016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-massive-1724587102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1724687102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7142201312016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-massive-7490921302016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-wsln1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-massive-7492321302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1521142162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1521342162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-philips-1521642162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-152805416dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-152825416dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-152835416dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1538030162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1538031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1538130162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1538230162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1538231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1538330162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1538331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1538530162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1538531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-philips-1538630162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-philips-1538631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1538730162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1538830162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1538831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1540186162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1540386162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1624587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1624593162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1624887162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1624893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1627086162016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-philips-1627186162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1631847162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1632093162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1632193162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1633847162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1633947162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1634047162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1634147162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1634247162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1635193162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1635293162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1635393162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1635493162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1635587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1635687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1635787162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1637947162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1638047162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1638147162016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-philips-1681247162016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-philips-1681347162016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-philips-1681447162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1681547162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1681687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1681693162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1681787162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1681793162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1681831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1681931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1682087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1682093162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1682187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1682193162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1682587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1682687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1685187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1685087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1685093162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1685193162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1685287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1685293162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1685687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1685731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-152654210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1685847162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1685893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1685947162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1686087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1686093162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1691393162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1691487162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1691493162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1691587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1691593162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1691687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1691693162016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-philips-1692131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1692893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1692987162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1693087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1693093162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1693187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1693193162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693293162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693393162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693487162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693493162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693593162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693693162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693793162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1693987162016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-philips-1694187162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1694287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1694293162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1694387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1694393162016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-philips-1694447162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1707147162016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-philips-1707447162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1710147162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1710247162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1710286162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1710386162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1710587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1710593162016-10-28Weekly0.9http://www.linija-svitla.ua/product/rozetka-philips-1710847162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1713087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1713093162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1715047162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1716647162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1718147162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-15030142dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1718487162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1718493162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1718547162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1720231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1720287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1720787162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1720893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1721042162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1721186162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1721747162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1721847162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1721947162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1722631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1722647162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1722693162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1722930162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1722931162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1722987162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1723893162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1723993162016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-philips-1724130162016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-philips-1724347162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725087162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725687162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725693162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1751587162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1624693162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725942162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-azle10-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-azle5-dark-grey2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-azle7-dgry-pir2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-azle8-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-azle8-white2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-balmoral2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bibury2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl10-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-bl12-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl13a-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-bl13b-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl15-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl17-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl18-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl18a-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-bl18b-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl19-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl2-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl21g-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-bl21a-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-bl21b-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl22g-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-bl25-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-bl33-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl37-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-bl38-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-bl48m-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl5-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-bl50m-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl52m-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl6a-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-bl6b-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl6c-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-bl7-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl8-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-block2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bt1l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bt1m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-bt3l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-bt3m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-bt5l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-bt8l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-bt8m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cc1l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cc1m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cc1s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cc2l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cc2m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cc2s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-cc3l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-cc3s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-cc4s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-cc5m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-cc8s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-copenhagen2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cp1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cp12-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cp2-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-cp4-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-cp5-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-cp6-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cp7-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cp72-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-cp8-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cpm2-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-cpm4-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-cpm5-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-dungarvan-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-dungarvan-wht2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-euston2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-febatonrgl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-febatonrgm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-febatonrgs2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-febatonrg32016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-febatonrg42016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-febatonrg52016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-febatonrg82016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-fechelseahbrf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-fechelseahbr22016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-fechelseahbr82016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-feeb2l-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-feeb2l-brb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-feeb2m-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-feeb2m-brb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze102016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze112016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze122016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze132016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze142016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze152016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzbronze162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzbronze172016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzbronze182016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzbronze192016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze22016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzbronze202016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze212016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze222016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze232016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze242016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze42016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze52016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze62016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze72016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze82016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze92016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzelite12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-feeb2s-brb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-feeb2xl-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-feeb3l-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-feeb3l-brb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-feeb3m-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-feeb3m-brb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-feeb4m-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-feeb4m-brb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-feeb5l-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-feeb5l-brb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-feeb8l-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-feeb8l-brb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-feeb8m-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-feeb8m-brb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-feregentctf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-feregentctl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-feregentctm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-feregentcts2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-feregentct32016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-feregentct42016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-feregentct52016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-gb1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-gl1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-glenbeigh-chain2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-glenbeigh-pedpo2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-glenbeigh-pillar2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-glenbeigh-post2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-glenbeigh-wall2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-gn1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-gp1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-elstead-gzelite1s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-elstead-gzelite3s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-elstead-gzelite5s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-helsingor2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-helsingor-ped2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-helsingor-pir2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hkbinghaml2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hkbinghamm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hkbinghams2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-hkbingham32016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzelite32016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzelite52016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzlymington-b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzlymington-w2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-hkmontauk-chain2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hkmontauk-l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hkmontauk-m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hkmontreall2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hkmontrealm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hkmontreals2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-hkmontreal32016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-hkmontreal82016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-hkreef3-he2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-hkreef3-vz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-hkreef8-he2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-hkreef8-vz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hl7m-db2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hl7s-db2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hl7s-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-hornbaek-ped2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hornbaek-w12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hornbaek-w22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hyde-park-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hyde-park-verdi2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hythe2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-kendal2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-kennington-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-kennington-verdi2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-kent2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-kerry-chain2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-kerry-flush2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-kerry-pedpor2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-kerry-pillar2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-kerry-post2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-kerry-wall2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-kinsale-chain2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-kinsale-flush2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-kinsale-pedpor2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-kinsale-pillar2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-kinsale-post2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-kinsale-wall2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-klampenborg2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-klampenborg82016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-kolne2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-lambeth-palace2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-malmo-b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-malmo-w2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-mansion-house-cp2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-mansion-house-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-mansion-house-v2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-mansionhswb1-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-mansionhswb1-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-mansionhs8-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-mansionhs8-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-matlock2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-md7-pir-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-merrow2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-miners-wall2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ne1s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ne8m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-newlyn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-nr1-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-nr1-pir-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-nr2-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-nr3-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-nr4-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-nr72-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-nr8-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-old-bailey-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ordrup2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph1l-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph1l-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph1m-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph1s-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph2l-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph2l-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph2m-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph2s-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-ph3m-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-ph4m-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-ph5l-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-ph8m-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-polruan2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-pr1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-pr12-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-pr2-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-pr4-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-pr5-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-pr6-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-pr7-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-pr8-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-prm1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-prm2-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-prm4-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-prm5-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-qzmarine32016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-regents-park-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-regents-park-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-regents-park-v2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-shannon-chain2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-shannon-down2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-shannon-ped2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-shannon-pillar2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-shannon-twinpost2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-shannon-up2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-sheldon-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-sheldon-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-sheldon-v2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-somerton-an2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-somerton-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-st-james-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-st-martins-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-st-martins-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-st-martins-v2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-st-pauls-brass2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-st-paulswb12016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-st-pauls82016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-stl2m-wb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-stow2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-victoria-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-victoria-verdi2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-wb2-rust2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-wb7-rust2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-wb9-rust2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-westminster-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-westminster-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-westminster-v2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-wslb1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-wsll1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-wslp1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-wx12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-wx1-pir2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-wx22016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-wx32016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-wx42016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-wx72016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-wx82016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-wx92016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-light-topps-lt350072016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1722518102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl21-black-e272016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bruges-st-steel2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-downing-street2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-downing-street-v2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-fecotslnf-bk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-fecotslnf-gb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-fecotsln2l-bk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-fecotsln2l-gb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-fecotsln2m-bk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-fecotsln2m-gb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-fecotsln2s-bk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-fecotsln2s-gb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-feiss-fecotsln3l-bk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-feiss-fecotsln3l-gb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-feiss-fecotsln3m-bk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-feiss-fecotsln3m-gb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-feiss-fecotsln4m-bk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-feiss-fecotsln4m-gb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-feiss-fecotsln5l-gb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-fecotsln7-gb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-feiss-fecotsln8l-bk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-feiss-fecotsln8l-gb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-feiss-fecotsln8m-bk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-feiss-fecotsln8m-gb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-femerrill1m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze12016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzbronze32016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzelite22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzelite42016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzelite62016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzfusion12016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzfusion102016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzfusion112016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzfusion32016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzfusion42016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzfusion52016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzfusion72016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzfusion82016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzfusion92016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzoptica12016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzfusion22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzoptica22016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzoptica32016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzoptica42016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzpoole-b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzpoole-mb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzpoole-w2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzsandbanks-b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzsandbanks-mb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzccderwent-12016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzccderwent-52016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzccspennymr-1p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzccspennymr-1s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzccspennymr-3p2016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzccspennymr-3s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhbf22016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzhbf42016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-garden-zone-gzhbf82016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhchw22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhckl72016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhcrc22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhelk12016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzhelk32016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzheve22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhff122016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhgls12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhhn12016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhlb12016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzhlb32016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzhlb52016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhmalv2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhnb72016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-feiss-femerrill3s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-feiss-femerrill8s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-feredding2l-rb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-feredding2l-tn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-feredding2m-rb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-feredding2m-tn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-feredding2s-rb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-feredding2s-tn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-feiss-feredding8m-rb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-feiss-feredding8m-tn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhsdn22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhship22016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-garden-zone-gzhwc22016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-garden-zone-gzhwc32016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkbrighton1l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkbrighton1xl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkbrighton2m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkbrighton2s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-hinkley-hkbrighton3m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-hinkley-hkbrighton8m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-kichler-kltournai5xl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-lambeth-palace-v2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-livre-led2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ma12016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-ma42016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-miners-chn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-miners-ped2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-old-bailey-v2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph1m-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph1s-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph2m-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph2s-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkcapecod2m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkcapecod2s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-hinkley-hkcapecod8l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-hinkley-hkcapecod8s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkmanhattan2l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkmanhattan2m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkmanhattan2s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-hinkley-hkmanhattan3m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-hinkley-hkmanhattan8s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkquincym2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-hinkley-hkquincy3m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-hinkley-hkquincy8m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkreefmini-he2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkreefmini-vz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkreefsm-he2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkreefsm-vz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hktrellis2l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hktrellis2s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-hinkley-hktrellis3l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klfranceasif2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klfranceasil2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klfranceasim2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klluverne2m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1547130162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1547230162016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-philips-1547231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7152501312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7152601312016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klluverne2s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-kichler-klluverne3m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klluverne8m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-kllyndon2s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-light-topps-lt350092016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-kichler-kllyndon8s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-massive-1519686102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klpettifordm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klpettifords2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-kichler-klpettiford82016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hkquincys2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-kltournai1gl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-kltournai1gxl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-kltournai2l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-kltournai2m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-kltournai2xl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-kichler-kltournai3l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-kichler-kltournai4m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-kichler-kltournai8m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-kichler-kltournai8xl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-kichler-kltournai8gxl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klvenetianf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klvenetian2l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klvenetian7s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-kichler-klvenetian8m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-ph3m-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-ph4m-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-ph5l-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-ph8m-ob2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-prague2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-quoizel-qzbyronl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-quoizel-qzbyronm2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-quoizel-qzbyrons2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-quoizel-qzgeorgetown2l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-quoizel-qzgeorgetown2m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-quoizel-qzgeorgetown2s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-quoizel-qznewburyf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-quoizel-qznewbury2l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-quoizel-qznewbury2m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-quoizel-qznewbury2s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-quoizel-qznewbury2xl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-quoizel-qznewbury3l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-quoizel-qznewbury8l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-light-topps-lt340172016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1503131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-light-topps-lt320172016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-light-topps-lt311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-light-topps-lt313902016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-light-topps-lt320192016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-feiss-fecotsln5l-bk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-light-topps-lt340192016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-151424510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-152514210dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-162358610dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-elstead-gzelite1l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-elstead-gzelite3l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/perenosnoy-svetilnik-elstead-gzelite5l2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1618387102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1619047102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klvenetian2m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-kltournaif2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-170573110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1517142102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1519186102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-7142501302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1618842102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1751587102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1623586102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-16440130dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1624593102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1718147102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1532086102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1538030102016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-1538631102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1538731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1720787102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1723754102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1541730102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1724747162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1625393162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1640493162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-1702647102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1538131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1538731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1681993162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1685787162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1692993162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1718387162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1718393162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-philips-1725030162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl36-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-bl46m-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-cpm1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-feeb2s-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-feeb2xl-brb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-hkbingham82016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-hl7m-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-mansion-house-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-md7-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-old-bailey-br2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-somerton-v2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-st-james-verdi2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-stl2s-wb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-fecotsln7-bk2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-elstead-helsinki-b2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-elstead-helsinki-w2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-hinkley-hktrellis2m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-kllyndon2m2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klpettifordl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-light-topps-lt340572016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-massive-749022187dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6911234ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4304355302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4304555302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4450119162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4450031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4450233162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4450035162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7170425162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7170428162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7170432162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7170453162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6710933102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6710953152016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6710953102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6710987102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4304455302016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-660083310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6600835102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-1292301322016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-1292301352016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6700296102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6700246102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6700232102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4359255102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4359155102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4359055102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4324655102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4324555102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-4301732102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-414061552016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-414062552016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-455035530dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-6914255ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4555755102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3026855162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4327655162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4550255162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4450419162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4451035162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7176932162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-7176940162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4451233162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4451119162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-660103310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-660105310dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-432023110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6600928102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6600953102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3084131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-4563035162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-4563119162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4569428102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-520505530dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-5205255302016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-5630055302016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-5631055302016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-4304255302016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3306055302016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3006455102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4327555162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6911231ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6710987152016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-4327432162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6911232ph2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5617255102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4009435102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4009532102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4042635102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4042734102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4050955102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3026235102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3026755102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5650455102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4102233102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4101732102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3050031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3050053102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3050153102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4009628102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4059355162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4009355162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4159428162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3050031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3050053162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3050135162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3050153162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4009234162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4009628162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4009634162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4015355162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4017855162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4020455162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4022955162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4024531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4024533162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4024553162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4027955162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4028134162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4035620162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4042635162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4042734162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4059155162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4059255162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4059455162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4062832162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4101732162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4102233162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5631055162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-5631455162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-7862155162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4106948162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4107235162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4035620102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4159428102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5617355102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5630355102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-5631455102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4009234102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4009355102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4009855102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4022955102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4028055102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4028134102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4020455102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7862101552016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3011055102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4009634102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-4017855102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7061481342016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-7550001342016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3011155102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-401795510dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3409511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathausten1-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathausten2-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathblake2-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcarroll1-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcarroll2-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcarroll3-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden2-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden3-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden4-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden4-ps2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3401511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-340161110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3404111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-340421110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3404311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-340511710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-340871110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3208287102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3413311102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3413406102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5957031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5958017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5958031102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3200911102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3200917102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3202067102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3202531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3202611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3207131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3208017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3401517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3401617102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3409711102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3409811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3413111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3413611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3413711102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3413811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3431211102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3414111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3200187102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3202467102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3220711162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3420531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3420631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3420731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3421331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3220811162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3220911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3420811162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3221331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3421231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3221311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3421211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3421311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792617162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792631162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3220111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3220211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3420111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3220017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3220031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3220317162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3220417162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3420317162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3221011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3221031162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathay12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathbb1-brz2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathbr1-chrome2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathwl12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathwl22016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-bathwl32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3201011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3201017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3201511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3207017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3408111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3408211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3408311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3408411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3414411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3414431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3414511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3200531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3200917162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3201731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3206431162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3206731162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3208287162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3402011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3402111162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3402211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3408611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3409611162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5990211162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5990511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5990517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5991011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5991017162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5992517162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3201717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3201787162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3205411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3401831162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3404711162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3404911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3405011162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3405311162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3405411162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3405511162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathausten1-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathausten1-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathausten2-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathausten2-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathausten3-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathausten3-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathausten3-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathausten4-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathausten4-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathausten4-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathblake1-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathblake1-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathblake1-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathblake2-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathblake2-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathblake3-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathblake3-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathblake3-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathblake4-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathblake4-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathblake4-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathbn12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathbn22016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-bathbn32016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathbr2-chrome2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcarroll1-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcarroll1-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcarroll2-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcarroll3-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcarroll3-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcarroll4-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcarroll4-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcarroll4-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcd12016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-bathcd32016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden1-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden1-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden1-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden2-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden2-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden3-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden3-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden4-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden4-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-batheliot1-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-batheliot1-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-batheliot2-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-batheliot2-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathgw12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathsb12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3405911162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3405811162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-philips-3410811162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-bathbromptonf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden5-pb2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden5-pn2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathmn1-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathmn2-black2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathov1-igold2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-bathrydef2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feconcord1-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feconcord2-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feconcord3-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feconcord4-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fehugolake1bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fehugolake2bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fehugolake3bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-femalibuf-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-femalibu1-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-fepaynef-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fepayne1-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fepayne2-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fepayn-or1-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fepayn-or2-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-feiss-feperryf-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-feperry1-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fewadswth1-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-feiss-fewadswth3-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkashleyf-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkavonf-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkavon1-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkavon3-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkbrooke1-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkbrooke3-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkconstan3-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkfrancoi1-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkfrancoi3-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-hinkley-hkhadleyf-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkisabela1-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkisabela3-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hklanza1-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hklanza3-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qztranquilbay12016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-quoizel-qztranquilbay32016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3206331162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3201511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-320341110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3206431102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3206731102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-340623110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-340633110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3200531102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3201011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3201017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-320246710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3406131102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3202111102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3202117102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3400811102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3400911102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3401217102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-340131710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3403711102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-340911710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3409611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3404817102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-340041110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3408411102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3408611102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3409511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3408806102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3409506102016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-massive-3409906102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5990511102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5990517102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5991011102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5991017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5992317102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-599233110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3206531162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-320018710dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden1-pn-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3050135102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-4059055162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3011255102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-massive-5957017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5792717162016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-philips-3208131162016-10-28Weekly0.9http://www.linija-svitla.ua/product/tochechnyy-svetilnik-philips-5990231162016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathcarroll2-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathaml2-blksl2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden5-pc2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-elstead-bathwhitbyf2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-hinkley-hkconstan1-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-3207017102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-320013110dis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/bra-elstead-bathdryden4-ps-bath2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6720035102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6720433162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6720035162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-philips-6922528162016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6671328102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6643417102016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastolnaya-lampa-massive-6731932102016-10-28Weekly0.9http://www.linija-svitla.ua/product/lyustra-massive-362583432016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-klfranceasis2016-10-28Weekly0.9http://www.linija-svitla.ua/product/stolb-massive-0172801472016-10-28Weekly0.9http://www.linija-svitla.ua/product/vstraivaemyy-svetilnik-garden-zone-gzfusion62016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-kichler-kltournai2s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/nastenno-potolochnyy-svetilnik-feiss-femerrill1s2016-10-28Weekly0.9http://www.linija-svitla.ua/product/podvesnoy-svetilnik-elstead-nr9-blk2016-10-28Weekly0.9http://www.linija-svitla.ua/articles/liniya-sveta-predstavila-trendovye-modeli-na-interior-mebel2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:brands=quoizel2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:brands=garden-zone2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:brands=hinkley2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:brands=elstead2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:brands=light-topps2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:brands=massive2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:brands=philips2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:brands=feiss2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:brands=kichler2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=quoizel2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=lirio2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=eseo2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=hinkley2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=flambeau2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=elstead2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=light-topps2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=massive2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=philips2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=feiss2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:brands=kichler2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:brands=luis-collection2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:brands=elstead2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:brands=quoizel2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:brands=hinkley2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:brands=elstead2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:brands=philips2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:brands=massive2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:brands=feiss2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:brands=pila2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:brands=light-topps2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:brands=philips2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:brands=philips2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:brands=massive2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:brands=quoizel2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:brands=lirio2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:brands=eseo2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:brands=hinkley2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:brands=elstead2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:brands=flambeau2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:brands=massive2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:brands=philips2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:brands=feiss2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:brands=kichler2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:brands=elstead2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:brands=light-topps2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:brands=massive2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:brands=light-topps2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:brands=philips2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:brands=massive2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:brands=luis-collection2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:brands=quoizel2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:brands=lirio2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:brands=eseo2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:brands=elstead2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:brands=flambeau2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:brands=light-topps2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:brands=massive2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:brands=philips2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:brands=quoizel2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:brands=lirio2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:brands=eseo2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:brands=elstead2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:brands=massive2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:brands=philips2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:brands=lirio2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:brands=light-topps2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:brands=elstead2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:brands=massive2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:brands=philips2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:podrazdel-ulichnoe=stolby2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:podrazdel-ulichnoe=podvesnye2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:podrazdel-ulichnoe=nastenno-potolochnye2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:podrazdel-ulichnoe=vreznye-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:podrazdel-ulichnoe=perenosnye2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:podrazdel-ulichnoe=vstraivaemye-v-grunt2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:koli4estvo-ulichnoe=2-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:koli4estvo-ulichnoe=1-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:koli4estvo-ulichnoe=3-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:koli4estvo-ulichnoe=4-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:koli4estvo-ulichnoe=6-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:koli4estvo-ulichnoe=10-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=g24q12016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=2g11-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=2g7-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=r7s-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=e14-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=gx53-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=2gx13-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=led-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=gu10-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=e27-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=gr10q-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=g9-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:cokol-ulichnoe=g23-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:napryga-ulichnoe=ot-seti-220-v-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:style-ulichnoe=sovremennyy-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:style-ulichnoe=klassicheskiy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:style-ulichnoe=loft-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:formaplafona-ulichnoe=bez-plafona-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:formaplafona-ulichnoe=kvadrat-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:formaplafona-ulichnoe=treugolnik-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:formaplafona-ulichnoe=polukrug-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:formaplafona-ulichnoe=cilindr-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:formaplafona-ulichnoe=konus-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:formaplafona-ulichnoe=polusfera-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:formaplafona-ulichnoe=kub-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:formaplafona-ulichnoe=kr2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:formaplafona-ulichnoe=pryamougolnik-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:formaplafona-ulichnoe=trapeciya-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=multi-142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=prozrachnoe-steklo-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=zheltyy-142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=bronza-142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=zelenyy-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=seryy-182016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=kremovyybezhevyy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=alyuminiy-192016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=matovyy-belyy-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=be-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=sero-zelenyy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=yantarnyy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafoncolor-ulichnoe=chernyy-192016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basecolor-ulichnoe=zelenyy-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basecolor-ulichnoe=seryy-172016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basecolor-ulichnoe=chernyy-182016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basecolor-ulichnoe=nikel-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basecolor-ulichnoe=belyy-152016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basecolor-ulichnoe=bronza-132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basecolor-ulichnoe=temno-korichnevyy-132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basecolor-ulichnoe=alyuminiy-182016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basecolor-ulichnoe=nerzhaveyka-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basecolor-ulichnoe=hrom-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basecolor-ulichnoe=zoloto-142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basecolor-ulichnoe=korich-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafonmaterial-ulichnoe=metall-242016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafonmaterial-ulichnoe=steklo-232016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:plafonmaterial-ulichnoe=plastik-182016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basematerial-ulichnoe=metall-232016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:basematerial-ulichnoe=plastik-192016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:dekormaterial-ulichnoe=steklo-242016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:dekormaterial-ulichnoe=alyuminiy-202016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:dekormaterial-ulichnoe=nerzhaveyushchaya-stal-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:dekormaterial-ulichnoe=metall-252016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:ip-ulichnoe=ip23-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:ip-ulichnoe=ip67-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:ip-ulichnoe=ip20-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:ip-ulichnoe=ip54-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:ip-ulichnoe=ip65-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:ip-ulichnoe=ip44-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:ip-ulichnoe=ip43-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:typeisto4nikasveta-ulichnoe=lyuminescentnaya-lampa-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:typeisto4nikasveta-ulichnoe=lampa-nakalivaniya-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:typeisto4nikasveta-ulichnoe=svetodiodnaya-lampa-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:typekreplenie-ulichnoe=plastina-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:typeisto4nikasveta-ulichnoe=galogenovaya-lampa-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:maxpower-ulichnoe=ot-100w-do-150w-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:maxpower-ulichnoe=ot-250w-do-300w-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:maxpower-ulichnoe=ot-300w-do-400w-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:maxpower-ulichnoe=do-10-w-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:maxpower-ulichnoe=ot-400w-do-500w-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:maxpower-ulichnoe=ot-150w-do-200w-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:maxpower-ulichnoe=ot-50w-do-100w-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:maxpower-ulichnoe=ot-10w-do-25w-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:maxpower-ulichnoe=ot-25w-do-50w-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:maxpower-ulichnoe=ot-500w-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:sposobvikly4atela-ulichnoe=datchik-dvizheniya-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/ulichnoe-osveshchenie/filters:sposobvikly4atela-ulichnoe=vynosnoy-vyklyuchatel-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:podrazdel-lustri=podves2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:podrazdel-lustri=svetilnik-potolochnyy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:podrazdel-lustri=lyustry-dlya-vannyh-komnat2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:podrazdel-lustri=det-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:podrazdel-lustri=lyustra-pripotolochnaya2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=7-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=252016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=182016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=1-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=24-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=5-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=2-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=162016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=3-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=4-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:koli4estvo-lustri=152016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=2g11-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=g23-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=g9-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=2gx13-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=g5-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=g4-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=gu10-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=e14-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=t5-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=r7s-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=2g7-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=gx53-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=e27-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=g10q-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=gr102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=g53-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=gy635-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=tl5c-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:cokol-lustri=led-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:napryga-lustri=transformator-12-vv-komplakte-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:napryga-lustri=12-v-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:napryga-lustri=ot-seti-220-v-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:style-lustri=loft-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:style-lustri=klassicheskiy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:style-lustri=sovremennyy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:style-lustri=tiffani-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:formaplafona-lustri=sf-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:formaplafona-lustri=bez-plafona-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:formaplafona-lustri=konus-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:formaplafona-lustri=krug-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:formaplafona-lustri=polusfera-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:formaplafona-lustri=treugolnik-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:formaplafona-lustri=kvadrat-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:formaplafona-lustri=pryamougolnik-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:formaplafona-lustri=kub-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:formaplafona-lustri=cilindr-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:formaplafona-lustri=trapeciya-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:formaplafona-lustri=polukrug-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=multi-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=belyy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=zheltyy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=goluboy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=krasnyy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=prozrachnyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=alyuminiy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=zelenyy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=temno-korichnevyy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=zoloto-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=bezhevyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=nikel-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=nerzhaveyka-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=hrom-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=seryy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=chernyy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=bronza-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basecolor-lustri=korichnevyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=seryy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=multi-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=rozovyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=yantarnyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=zheltyy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=chernyy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=hrom-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=alyuminiy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=korichnevyy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=fioletovyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=matovyy-belyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=zoloto-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=siniy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=temno-korichnevyy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=nikel-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=belyy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=prozrachnoe-steklo-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=sero-zelenyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=stal-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=kremovyybezhevyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=mramor-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=goluboy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=bronza-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=zelenyy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=opal-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafoncolor-lustri=krasnyy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basematerial-lustri=metall-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basematerial-lustri=derevo-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basematerial-lustri=keramika-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basematerial-lustri=kamen-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basematerial-lustri=steklo-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basematerial-lustri=tkan-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:basematerial-lustri=plastik-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafonmaterial-lustri=met2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafonmaterial-lustri=plastik-202016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafonmaterial-lustri=orgaza-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafonmaterial-lustri=derevo-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafonmaterial-lustri=nit-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafonmaterial-lustri=steklo-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafonmaterial-lustri=kamen-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafonmaterial-lustri=tiffaniart-steklo-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafonmaterial-lustri=tkan-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafonmaterial-lustri=plastik-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:plafonmaterial-lustri=hrustal-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:dekormaterial-lustri=derevo-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:dekormaterial-lustri=steklo-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:dekormaterial-lustri=metall-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:dekormaterial-lustri=sinteticheskie-matelialy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:dekormaterial-lustri=hrustal-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:dekormaterial-lustri=nerzhaveyushchaya-stal-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:dekormaterial-lustri=alyuminiy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:dekormaterial-lustri=med2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:dekormaterial-lustri=keramika-i-gips-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:dekormaterial-lustri=tkan-i-tekstil-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:dekormaterial-lustri=kamen-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:ip-lustri=ip44-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:ip-lustri=ip21-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:ip-lustri=ip23-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:ip-lustri=ip20-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:typeisto4nikasveta-lustri=lyuminescentnaya-lampa-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:typeisto4nikasveta-lustri=svetodiodnaya-lampa-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:typeisto4nikasveta-lustri=lampa-nakalivaniya-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:typeisto4nikasveta-lustri=galogenovaya-lampa-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:maxpower-lustri=ot-500w2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:maxpower-lustri=ot-25w-do-50w-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:maxpower-lustri=ot-400w-do-500w-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:maxpower-lustri=ot-250w-do-300w-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:maxpower-lustri=ot-50w-do-100w-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:maxpower-lustri=ot-10w-do-25w-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:maxpower-lustri=ot-150w-do-200w-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:maxpower-lustri=ot-100w-do-150w-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:maxpower-lustri=ot-200w-do-250w2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:maxpower-lustri=ot-300w-do-400w-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:maxpower-lustri=do-10-w-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:typekreplenie-lustri=plastina-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:typekreplenie-lustri=kryuk-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:sposobvikly4atela-lustri=vyklyuchatel-na-korpuse-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:sposobvikly4atela-lustri=dimmer-na-korpuse-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:sposobvikly4atela-lustri=vynosnoy-vyklyuchatel-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:sposobvikly4atela-lustri=pult-du-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lyustry-i-potolochnoe-osveshchenie/filters:podrazdel-lustri=lyustra2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:podrazdel-abazyr=plafony2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:podrazdel-abazyr=abazhury2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:style=sovremennyy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:style=klassicheskiy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:formaplafona-abazyr=trapeciya2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:formaplafona-abazyr=kvadrat2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:formaplafona-abazyr=konus2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:formaplafona-abazyr=polukrug2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:formaplafona-abazyr=krug2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:formaplafona-abazyr=cilindr2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafoncolor-abazyr=rozovyy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafoncolor-abazyr=korichnevyy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafoncolor-abazyr=matovyy-belyy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafoncolor-abazyr=zoloto2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafoncolor-abazyr=kremovyybezhevyy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafoncolor-abazyr=chernyy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafoncolor-abazyr=krasnyy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafoncolor-abazyr=zelenyy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafoncolor-abazyr=goluboy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafoncolor-abazyr=seryy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafoncolor-abazyr=sero-zelenyy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafoncolor-abazyr=belyy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafonmaterial-abazyr=plastik2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/abazhury-i-plafony/filters:plafonmaterial-abazyr=tkan2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:podrazdel-vanna=tochechnoe-osveshchenie2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:podrazdel-vanna=bra-i-nastennye-svetilniki-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:podrazdel-vanna=podsvetki-dlya-zerkal2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:podrazdel-vanna=lyustry-i-potolochnye-svetilniki-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:koli4estvo-vanna=1-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:koli4estvo-vanna=2-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:koli4estvo-vanna=3-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:cokol-vanna=g5-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:cokol-vanna=r7s-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:cokol-vanna=g9-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:cokol-vanna=gu10-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:cokol-vanna=2gx13-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:cokol-vanna=tl5c-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:cokol-vanna=led-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:cokol-vanna=e27-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:cokol-vanna=e14-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:cokol-vanna=2g7-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:cokol-vanna=gx53-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:napryga-vanna=ot-seti-220-v-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:style-vanna=klassicheskiy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:style-vanna=lo2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:style-vanna=sovremennyy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:formaplafona-vanna=trapeciya-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:formaplafona-vanna=konus-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:formaplafona-vanna=cilindr-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:formaplafona-vanna=krug-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:formaplafona-vanna=polusfera-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:formaplafona-vanna=kvadrat-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:formaplafona-vanna=bez-plafona-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:formaplafona-vanna=polukrug-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:formaplafona-vanna=kub-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:plafoncolor-vanna=belyy-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:plafoncolor-vanna=kremovyybezhevyy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:plafoncolor-vanna=chernyy-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:plafoncolor-vanna=matovyy-belyy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:plafoncolor-vanna=prozrachnoe-steklo-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:basecolor-vanna=nerzhaveyka-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:basecolor-vanna=seryy-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:basecolor-vanna=hrom-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:basecolor-vanna=belyy-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:basecolor-vanna=zoloto-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:basecolor-vanna=alyuminiy-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:basecolor-vanna=bronza-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:basecolor-vanna=chernyy-132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:basecolor-vanna=nikel-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:plafonmaterial-vanna=plastik-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:plafonmaterial-vanna=steklo-162016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:plafonmaterial-vanna=metall-162016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:basematerial-vanna=plastik-132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:basematerial-vanna=metall-152016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:dekormaterial-vanna=steklo-172016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:dekormaterial-vanna=metall-172016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:dekormaterial-vanna=sinteticheskie-matelialy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:dekormaterial-vanna=nerzhaveyushchaya-stal-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:ip-vanna=ip21-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:ip-vanna=ip44-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:ip-vanna=ip65-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:ip-vanna=ip20-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:ip-vanna=ip23-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:typeisto4nikasveta-vanna=lyuminescentnaya-lampa-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:typeisto4nikasveta-vanna=galogenovaya-lampa-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:typeisto4nikasveta-vanna=lampa-nakalivaniya-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:typekreplenie-vanna=plastina-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:typeisto4nikasveta-vanna=svetodiodnaya-lampa-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:maxpower-vanna=ot-25w-do-50w-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:maxpower-vanna=ot-150w-do-200w-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:maxpower-vanna=do-10-w-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:maxpower-vanna=ot-50w-do-100w-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:maxpower-vanna=ot-10w-do-25w-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:sposobvikly4atela-vanna=vyklyuchatel-na-korpuse-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-dlya-vannyh-komnat/filters:sposobvikly4atela-vanna=vynosnoy-vyklyuchatel-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:podrazdel-lampo4ki=lyuminescentnye2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:podrazdel-lampo4ki=energosberegayushchie-sfl2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:podrazdel-lampo4ki=galogenovye2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:podrazdel-lampo4ki=svetodiodnye-led2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:podrazdel-lampo4ki=aksessuary2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:podrazdel-lampo4ki=nakalivaniya2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=gx24d2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=e27-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=g52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=g4-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=g132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=g53-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=r7s-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=gy635-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=g9-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=gu10-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=gu532016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=2g11-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=e14-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=gr10q-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=2gx13-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:cokol-lampo4ki=g10q2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:napryga-lampo4ki=12-v-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:napryga-lampo4ki=ot-transformatora-12-vnet-v-komplekte2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:napryga-lampo4ki=ot-seti-220-v-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:maxpower-lampo4ki=ot-150w-do-200w-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:maxpower-lampo4ki=ot-25w-do-50w-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:maxpower-lampo4ki=ot-250w-do-300w2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:maxpower-lampo4ki=ot-300w-do-400w2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:maxpower-lampo4ki=ot-400w-do-500w2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:maxpower-lampo4ki=ot-50w-do-100w-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:maxpower-lampo4ki=do-10-w-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:maxpower-lampo4ki=ot-100w-do-150w-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/lampochki/filters:maxpower-lampo4ki=ot-10w-do-25w-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:podrazdel-detskie=bra-i-nastennye-svetilniki-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:podrazdel-detskie=lyustry-i-potolochnye-svetilnikt2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:podrazdel-detskie=nastolnye2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:koli4estvo-detskie=3-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:koli4estvo-detskie=1-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:koli4estvo-detskie=4-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:koli4estvo-detskie=2-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:cokol-detskie=gu10-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:cokol-detskie=g9-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:cokol-detskie=e14-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:cokol-detskie=g4-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:cokol-detskie=e27-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:cokol-detskie=led-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:napryga-detskie=transformator-12-vv-komplakte-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:napryga-detskie=12-v-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:napryga-detskie=45-v2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:napryga-detskie=batareyki2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:dekormaterial-detskie=keramika-i-gips-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:dekormaterial-detskie=steklo-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:napryga-detskie=akkumulyatoryv-komplekte2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:dekormaterial-detskie=metall-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:dekormaterial-detskie=sinteticheskie-matelialy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:dekormaterial-detskie=derevo-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:napryga-detskie=ot-seti-220-v-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:style-detskie=sovremennyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:formaplafona-detskie=cilindr-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:formaplafona-detskie=krug-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:formaplafona-detskie=konus-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:formaplafona-detskie=polusfera-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:formaplafona-detskie=bez-plafona-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:plafoncolor-detskie=multi-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:plafoncolor-detskie=be-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:plafoncolor-detskie=zheltyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:plafoncolor-detskie=zelenyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:plafoncolor-detskie=goluboy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:plafoncolor-detskie=matovyy-belyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:plafoncolor-detskie=rozovyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:basecolor-detskie=zheltyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:basecolor-detskie=siniy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:basecolor-detskie=goluboy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:basecolor-detskie=belyy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:basecolor-detskie=krasnyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:basecolor-detskie=seryy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:basecolor-detskie=multi-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:basecolor-detskie=zelenyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:plafonmaterial-detskie=metall-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:plafonmaterial-detskie=steklo-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:plafonmaterial-detskie=plastik-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:plafonmaterial-detskie=tkan-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:plafonmaterial-detskie=derevo-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:basematerial-detskie=derevo-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:basematerial-detskie=plastik-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:basematerial-detskie=metall-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:basematerial-detskie=keramika-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:ip-detskie=ip20-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:ip-detskie=ip21-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:typeisto4nikasveta-detskie=galogenovaya-lampa-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:typeisto4nikasveta-detskie=svetodiodnaya-lampa-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:typeisto4nikasveta-detskie=lyuminescentnaya-lampa-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:typeisto4nikasveta-detskie=lampa-nakalivaniya-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:maxpower-detskie=ot-10w-do-25w-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:maxpower-detskie=ot-25w-do-50w-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:maxpower-detskie=do-10-w-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:maxpower-detskie=ot-50w-do-100w-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:typekreplenie-detskie=kryuk-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:typekreplenie-detskie=plastina-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:sposobvikly4atela-detskie=pult-du-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:sposobvikly4atela-detskie=vynosnoy-vyklyuchatel-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:sposobvikly4atela-detskie=vyklyuchatel-na-korpuse-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:sposobvikly4atela-detskie=datchik-dvizheniya2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/detskie-svetilniki/filters:sposobvikly4atela-detskie=vyklyuchatel-na-provode-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:podrazdel-bra=det-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:podrazdel-bra=podsvetki-kartin2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:podrazdel-bra=nastenye-svetilniki2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:podrazdel-bra=dlya-vannyh-komnat2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:podrazdel-bra=bra2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:koli4estvo-bra=1-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:koli4estvo-bra=22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:koli4estvo-bra=42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:koli4estvo-bra=32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:koli4estvo-bra=302016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=g232016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=2gx132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=gu102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=2g72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=r7s2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=g5-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=led-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=t52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=gr10q2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=2g112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=g92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=gx532016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=g42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=tl5c2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:napryga-bra=12-v2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:napryga-bra=transformator-12-vv-komplakte2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:napryga-bra=ot-seti-220-v-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:napryga-bra=32-v2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:style-bra=sovremennyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:style-bra=klassicheskiy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:style-bra=loft2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:style-bra=tiffani2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:formaplafona-bra=treugolnik2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:formaplafona-bra=polusfera2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:formaplafona-bra=bez-plafona-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:formaplafona-bra=trapeciya-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:formaplafona-bra=krug-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:formaplafona-bra=kub-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:formaplafona-bra=kvadrat-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:formaplafona-bra=konus-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:formaplafona-bra=cilindr-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:formaplafona-bra=pryamougolnik-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:formaplafona-bra=polukrug-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=yantarnyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=sero-zelenyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=korich-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=zelenyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=belyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=matovyy-belyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=roz2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=prozrachnoe-steklo2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=krasnyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=chernyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=alyuminiy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=temno-korichnevyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=zheltyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=seryy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=goluboy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=multi-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=opal2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=stal-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=bronza-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=kremovyybezhevyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=zoloto-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=hrom-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafoncolor-bra=nikel-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=belyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=nerzhaveyka-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=zoloto-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=prozrachnyy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=temno-korichnevyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=korichnevyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=hr2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=nikel-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=bezhevyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=multi-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=bronza-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=stal-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=seryy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=alyuminiy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=chernyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basecolor-bra=krasnyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafonmaterial-bra=tkan-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafonmaterial-bra=hrustal-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafonmaterial-bra=derevo-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafonmaterial-bra=metall-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafonmaterial-bra=nit2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafonmaterial-bra=kamen-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafonmaterial-bra=steklo-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafonmaterial-bra=plastik-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafonmaterial-bra=tiffaniart-steklo2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:plafonmaterial-bra=orgaza2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basematerial-bra=metall-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basematerial-bra=plastik-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basematerial-bra=derevo2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basematerial-bra=steklo-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:basematerial-bra=kamen2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:dekormaterial-bra=derevo-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:dekormaterial-bra=steklo-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:dekormaterial-bra=sinteticheskie-matelialy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:dekormaterial-bra=metall-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:dekormaterial-bra=hrustal2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:dekormaterial-bra=keramika-i-gips2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:dekormaterial-bra=nerzhaveyushchaya-stal2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:dekormaterial-bra=tkan-i-tekstil-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:dekormaterial-bra=kamen-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:dekormaterial-bra=alyuminiy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:typeisto4nikasveta-bra=galogenovaya-lampa2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:typeisto4nikasveta-bra=svetodiodnaya-lampa2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:typeisto4nikasveta-bra=lampa-nakalivaniya-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:typeisto4nikasveta-bra=lyuminescentnaya-lampa2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:maxpower-bra=ot-50w-do-100w2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:maxpower-bra=do-10-w2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:maxpower-bra=ot-25w-do-50w2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:maxpower-bra=ot-100w-do-150w2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:maxpower-bra=ot-10w-do-25w2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:maxpower-bra=ot-150w-do-200w2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:typekreplenie-bra=strubcina2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:typekreplenie-bra=plastina-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:sposobvikly4atela-bra=dimmer-na-korpuse2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:sposobvikly4atela-bra=dimmer-na-provode2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:sposobvikly4atela-bra=vyklyuchatel-na-korpuse-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:sposobvikly4atela-bra=vynosnoy-vyklyuchatel-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:sposobvikly4atela-bra=vyklyuchatel-na-provode2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=e142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:ip-bra=ip20-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:cokol-bra=e272016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:ip-bra=ip212016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:ip-bra=ip232016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/bra-i-nastennoe-osveshchenie/filters:ip-bra=ip44-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:podrazdel-aksesyari=krepleniya2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:podrazdel-aksesyari=datchiki-dvizheniya2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:podrazdel-aksesyari=zerkala2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:basecolor-aksesyari=belyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:basecolor-aksesyari=nikel2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:basecolor-aksesyari=temno-korichnevyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:basecolor-aksesyari=alyuminiy2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:basecolor-aksesyari=nerzhaveyka2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:basecolor-aksesyari=korichnevyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:style-aksesyari=sovremennyy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:style-aksesyari=klassicheskiy-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/aksessuary/filters:ip-aksesyari=ip202016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:podrazdel-gadjet=led-lenty2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:podrazdel-gadjet=led-svechi2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:podrazdel-gadjet=spot-on2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:podrazdel-gadjet=living-colors2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:koli4estvo-gadjet=12-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:koli4estvo-gadjet=5-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:koli4estvo-gadjet=2-132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:koli4estvo-gadjet=8-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:koli4estvo-gadjet=1-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:koli4estvo-gadjet=14-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:koli4estvo-gadjet=4-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:koli4estvo-gadjet=3-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:napryga-gadjet=12-v-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:napryga-gadjet=ot-seti-220-v-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:napryga-gadjet=transformator-12-vv-komplakte-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:napryga-gadjet=5-v2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:napryga-gadjet=batareyki-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:napryga-gadjet=akkumulyatory-v-komplekte2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:style-gadjet=sovremennyy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:plafoncolor-gadjet=be-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:plafoncolor-gadjet=prozrachnoe-steklo-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:plafoncolor-gadjet=matovyy-belyy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:basecolor-gadjet=chernyy-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:basecolor-gadjet=belyy-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:basecolor-gadjet=seryy-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:basecolor-gadjet=prozrachnyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:basecolor-gadjet=zheltyy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:basecolor-gadjet=siniy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:plafonmaterial-gadjet=plastik-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:plafonmaterial-gadjet=steklo-142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:basematerial-gadjet=metall-142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:basematerial-gadjet=plastik-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:ip-gadjet=ip65-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:ip-gadjet=ip20-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:ip-gadjet=ip44-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:typeisto4nikasveta-gadjet=svetodiodnaya-lampa-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:maxpower-gadjet=do-10-w-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:maxpower-gadjet=ot-50w-do-100w-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:sposobvikly4atela-gadjet=vynosnoy-vyklyuchatel-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:sposobvikly4atela-gadjet=vyklyuchatel-na-provode-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:sposobvikly4atela-gadjet=datchik-dvizheniya-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/svetilniki-gadzhety/filters:sposobvikly4atela-gadjet=vyklyuchatel-na-korpuse-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:podrazdel-nastolnie=ofisnye2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:podrazdel-nastolnie=det2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:podrazdel-nastolnie=dekorativnye2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:koli4estvo-nastolnie=2-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:koli4estvo-nastolnie=6-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:koli4estvo-nastolnie=1-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:koli4estvo-nastolnie=3-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:koli4estvo-nastolnie=5-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:cokol-nastolnie=g9-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:cokol-nastolnie=2g7-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:cokol-nastolnie=e27-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:cokol-nastolnie=gu10-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:cokol-nastolnie=gx53-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:cokol-nastolnie=e14-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:cokol-nastolnie=e292016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:cokol-nastolnie=gy635-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:cokol-nastolnie=g4-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:cokol-nastolnie=led-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:napryga-nastolnie=transformator-12-vv-komplakte-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:napryga-nastolnie=12-v-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:napryga-nastolnie=ot-seti-220-v-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:napryga-nastolnie=30-v2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:napryga-nastolnie=akkumulyatory2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:napryga-nastolnie=bata2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:napryga-nastolnie=45-v-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:style-nastolnie=tiffani-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:style-nastolnie=klassicheskiy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:style-nastolnie=sovremennyy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:style-nastolnie=loft-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:formaplafona-nastolnie=kvadrat-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:formaplafona-nastolnie=treugolnik-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:formaplafona-nastolnie=konus-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:formaplafona-nastolnie=krug-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:formaplafona-nastolnie=polukrug-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:formaplafona-nastolnie=cilindr-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:formaplafona-nastolnie=bez-plafona-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:formaplafona-nastolnie=trapeciya-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:formaplafona-nastolnie=kub-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:formaplafona-nastolnie=polusfera-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:formaplafona-nastolnie=pryamougolnik-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=chernyy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=nikel-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=korichnevyy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=bronza-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=rozovyy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=zelenyy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=sero-zelenyy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=seryy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=temno-korichnevyy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=goluboy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=matovyy-belyy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=serebro-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=zoloto-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=kremovyybezhevyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=krasnyy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=prozrachnoe-steklo-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=multi-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=zheltyy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=yantarnyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=stal-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=hrom-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=alyuminiy-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafoncolor-nastolnie=belyy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=hrom-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=belyy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=chernyy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=bronza-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=alyuminiy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=nikel-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=korichnevyy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=bezhevyy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=temno-korichnevyy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=zoloto-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=prozrachnyy-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=nerzhaveyka-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=krasnyy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=goluboy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=seryy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=zheltyy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=zelenyy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=multi-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=siniy-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basecolor-nastolnie=ser2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafonmaterial-nastolnie=steklo-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafonmaterial-nastolnie=tiffaniart-steklo-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafonmaterial-nastolnie=orgaza-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafonmaterial-nastolnie=plastik-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafonmaterial-nastolnie=tkan-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafonmaterial-nastolnie=derevo-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafonmaterial-nastolnie=metall-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafonmaterial-nastolnie=metall-i-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:plafonmaterial-nastolnie=tkan-i-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basematerial-nastolnie=steklo-132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basematerial-nastolnie=plastik-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basematerial-nastolnie=derevo-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basematerial-nastolnie=keramika-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basematerial-nastolnie=metall-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:basematerial-nastolnie=hrustal-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:dekormaterial-nastolnie=derevo-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:dekormaterial-nastolnie=sinteticheskie-matelialy-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:dekormaterial-nastolnie=hrustal-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:dekormaterial-nastolnie=metall-132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:dekormaterial-nastolnie=tkan-i-tekstil-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:dekormaterial-nastolnie=keramika-i-gips-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:dekormaterial-nastolnie=steklo-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:ip-nastolnie=ip20-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:ip-nastolnie=ip23-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:ip-nastolnie=ip21-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:typeisto4nikasveta-nastolnie=lampa-nakalivaniya-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:typekreplenie-nastolnie=strubcina-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:typeisto4nikasveta-nastolnie=galogenovaya-lampa-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:typekreplenie-nastolnie=plastina-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:typekreplenie-nastolnie=prishchepka-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:typeisto4nikasveta-nastolnie=lyuminescentnaya-lampa-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:typeisto4nikasveta-nastolnie=svetodiodnaya-lampa-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:maxpower-nastolnie=ot-100w-do-150w-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:maxpower-nastolnie=ot-10w-do-25w-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:maxpower-nastolnie=ot-50w-do-100w-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:maxpower-nastolnie=do-10-w-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:maxpower-nastolnie=ot-25w-do-50w-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:sposobvikly4atela-nastolnie=vyklyuchatel-na-provode-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:sposobvikly4atela-nastolnie=vyklyuchatel-na-korpuse-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:sposobvikly4atela-nastolnie=pult-du-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:sposobvikly4atela-nastolnie=vynosnoy-vyklyuchatel-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:sposobvikly4atela-nastolnie=dimmer-na-provode-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:sposobvikly4atela-nastolnie=datchik-d2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/nastolnye-lampy/filters:sposobvikly4atela-nastolnie=dimmer-na-korpuse-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:koli4estvo-torsher=6-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:koli4estvo-torsher=10-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:koli4estvo-torsher=5-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:napryga-torsher=transformator-12-vv-komplakte-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:koli4estvo-torsher=4-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:sposobvikly4atela-torsher=vyklyuchatel-na-provode-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:koli4estvo-torsher=3-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:sposobvikly4atela-torsher=vyklyuchatel-na-korpuse-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:napryga-torsher=ot-seti-220-v-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:ip-torsher=ip20-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:koli4estvo-torsher=1-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:sposobvikly4atela-torsher=vynosnoy-vyklyuchatel-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:koli4estvo-torsher=2-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:sposobvikly4atela-torsher=dimmer-na-provode-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:sposobvikly4atela-torsher=dimmer-na-korpuse-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:cokol-torsher=gu10-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:cokol-torsher=gr10-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:cokol-torsher=led-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:cokol-torsher=gx53-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:cokol-torsher=e27-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:cokol-torsher=g9-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:cokol-torsher=2g11-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:cokol-torsher=gy635-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:cokol-torsher=r7s-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:cokol-torsher=e14-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:cokol-torsher=g23-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:cokol-torsher=g4-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:style-torsher=klassicheskiy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:style-torsher=sovremennyy-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:style-torsher=tiffani-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:style-torsher=loft-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:formaplafona-torsher=kub-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:formaplafona-torsher=pryamougolnik-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:formaplafona-torsher=krug-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:formaplafona-torsher=bez-plafona-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:formaplafona-torsher=cilindr-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:formaplafona-torsher=trapeciya-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:formaplafona-torsher=polusfera-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:formaplafona-torsher=konus-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:formaplafona-torsher=kvadrat-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=nikel-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=matovyy-belyy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=stal-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=chernyy-142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=korichnevyy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=kremovyybezhevyy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=prozrachnoe-steklo-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=alyuminiy-142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=hrom-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=temno-korichnevyy-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=bronza-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=multi-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=yantarnyy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=seryy-142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=sero-zelenyy-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=be-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafoncolor-torsher=zel2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=bezhevyy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=temno-korichnevyy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=nikel-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=bronza-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=zelenyy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=seryy-132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=chernyy-152016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=nerzhaveyka-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=krasnyy-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=zheltyy-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=goluboy-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=alyuminiy-132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=belyy-132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=korichnevyy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basecolor-torsher=hrom-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafonmaterial-torsher=tkan-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafonmaterial-torsher=orgaza-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafonmaterial-torsher=plastik-142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafonmaterial-torsher=steklo-182016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafonmaterial-torsher=tiffaniart-steklo-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafonmaterial-torsher=nit-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafonmaterial-torsher=derevo-142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:plafonmaterial-torsher=metall-192016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:basematerial-torsher=metall-182016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:dekormaterial-torsher=metall-202016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:dekormaterial-torsher=steklo-192016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:dekormaterial-torsher=hrustal-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:dekormaterial-torsher=keramika-i-gips-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:typeisto4nikasveta-torsher=lyuminescentnaya-lampa-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:typeisto4nikasveta-torsher=lampa-nakalivaniya-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:typekreplenie-torsher=plastina-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:typeisto4nikasveta-torsher=svetodiodnaya-lampa-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:typeisto4nikasveta-torsher=galogenovaya-lampa-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:maxpower-torsher=do-10-w-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:maxpower-torsher=ot-100w-do-150w-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:maxpower-torsher=ot-10w-do-25w-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:maxpower-torsher=ot-200w-do-250w-22016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:maxpower-torsher=ot-150w-do-200w-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:maxpower-torsher=ot-300w-do-400w-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:maxpower-torsher=ot-250w-do-300w-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:maxpower-torsher=ot-25w-do-50w-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/torshery/filters:maxpower-torsher=ot-50w-do-100w-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:podrazdel-tochki=spoty2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:podrazdel-tochki=dlya-vannyh2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:podrazdel-tochki=nakladnye2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:podrazdel-tochki=vreznye2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:koli4estvo-tochki=4-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:koli4estvo-tochki=7-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:koli4estvo-tochki=5-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:koli4estvo-tochki=3-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:koli4estvo-tochki=1-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:koli4estvo-tochki=2-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:cokol-tochki=led-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:cokol-tochki=gu10-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:cokol-tochki=g53-62016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:cokol-tochki=e27-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:cokol-tochki=gu53-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:cokol-tochki=g4-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:cokol-tochki=g9-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:cokol-tochki=e14-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:cokol-tochki=gx53-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:napryga-tochki=12-v-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:napryga-tochki=transformator-12-vv-komplakte-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:napryga-tochki=ot-seti-220-v-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:napryga-tochki=107-v2016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:style-tochki=klassicheskiy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:style-tochki=sovremennyy-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:style-tochki=loft-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:formaplafona-tochki=bez-plafona-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:formaplafona-tochki=trapeciya-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:formaplafona-tochki=kvadrat-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:formaplafona-tochki=polusfera-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:formaplafona-tochki=cilindr-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:formaplafona-tochki=krug-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:formaplafona-tochki=konus-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafoncolor-tochki=prozrachnoe-steklo-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafoncolor-tochki=korich-32016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafoncolor-tochki=kremovyybezhevyy-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafoncolor-tochki=seryy-162016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafoncolor-tochki=matovyy-belyy-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafoncolor-tochki=chernyy-162016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafoncolor-tochki=bronza-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafoncolor-tochki=multi-132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafoncolor-tochki=alyuminiy-162016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafoncolor-tochki=temno-korichnevyy-122016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafoncolor-tochki=stal-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafoncolor-tochki=be-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basecolor-tochki=nerzhaveyka-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basecolor-tochki=alyuminiy-152016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basecolor-tochki=nikel-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basecolor-tochki=chernyy-172016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basecolor-tochki=temno-korichnevyy-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basecolor-tochki=korichnevyy-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basecolor-tochki=zoloto-132016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basecolor-tochki=seryy-152016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basecolor-tochki=bezhevyy-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basecolor-tochki=belyy-142016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basecolor-tochki=hrom-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basecolor-tochki=bronza-112016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafonmaterial-tochki=plastik-162016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafonmaterial-tochki=steklo-212016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:plafonmaterial-tochki=metall-222016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basematerial-tochki=steklo-202016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basematerial-tochki=metall-212016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:basematerial-tochki=plastik-172016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:dekormaterial-tochki=steklo-222016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:dekormaterial-tochki=alyuminiy-172016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:dekormaterial-tochki=nerzhaveyushchaya-stal-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:ip-tochki=ip23-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:ip-tochki=ip20-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:ip-tochki=ip65-42016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:ip-tochki=ip21-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:ip-tochki=ip44-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:typeisto4nikasveta-tochki=galogenovaya-lampa-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:typeisto4nikasveta-tochki=svetodiodnaya-lampa-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:typekreplenie-tochki=plastina-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:typeisto4nikasveta-tochki=lyuminescentnaya-lampa-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:typeisto4nikasveta-tochki=lampa-nakalivaniya-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:maxpower-tochki=ot-250w-do-300w-52016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:maxpower-tochki=do-10-w-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:maxpower-tochki=ot-10w-do-25w-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:maxpower-tochki=ot-150w-do-200w-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:maxpower-tochki=ot-100w-do-150w-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:maxpower-tochki=ot-50w-do-100w-92016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:maxpower-tochki=ot-25w-do-50w-82016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:sposobvikly4atela-tochki=pult-du-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:sposobvikly4atela-tochki=vynosnoy-vyklyuchatel-102016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:sposobvikly4atela-tochki=vyklyuchatel-na-provode-72016-10-28Weekly0.8http://www.linija-svitla.ua/catalog/tochechnoe/filters:sposobvikly4atela-tochki=vyklyuchatel-na-korpuse-122016-10-28Weekly0.8 \ No newline at end of file diff --git a/frontend/web/thumbs/products/1348487515-4424-1546_list.jpg b/frontend/web/thumbs/products/1348487515-4424-1546_list.jpg new file mode 100755 index 0000000..c03c3f9 Binary files /dev/null and b/frontend/web/thumbs/products/1348487515-4424-1546_list.jpg differ diff --git a/frontend/web/thumbs/products/1348487515-4424-1546_product_variant.jpg b/frontend/web/thumbs/products/1348487515-4424-1546_product_variant.jpg new file mode 100755 index 0000000..a329f5c Binary files /dev/null and b/frontend/web/thumbs/products/1348487515-4424-1546_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1348489542-702-5816_product_trumb2.jpg b/frontend/web/thumbs/products/1348489542-702-5816_product_trumb2.jpg new file mode 100755 index 0000000..1b6c05b Binary files /dev/null and b/frontend/web/thumbs/products/1348489542-702-5816_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/1348489542-702-5816_product_variant.jpg b/frontend/web/thumbs/products/1348489542-702-5816_product_variant.jpg new file mode 100755 index 0000000..d5d540b Binary files /dev/null and b/frontend/web/thumbs/products/1348489542-702-5816_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1348490194-360-284_product_variant.jpg b/frontend/web/thumbs/products/1348490194-360-284_product_variant.jpg new file mode 100755 index 0000000..a585b75 Binary files /dev/null and b/frontend/web/thumbs/products/1348490194-360-284_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1348490344-6421-5352_list.jpg b/frontend/web/thumbs/products/1348490344-6421-5352_list.jpg new file mode 100755 index 0000000..332b120 Binary files /dev/null and b/frontend/web/thumbs/products/1348490344-6421-5352_list.jpg differ diff --git a/frontend/web/thumbs/products/1348490344-6421-5352_product_variant.jpg b/frontend/web/thumbs/products/1348490344-6421-5352_product_variant.jpg new file mode 100755 index 0000000..9c85de2 Binary files /dev/null and b/frontend/web/thumbs/products/1348490344-6421-5352_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1348490519-4780-1400_list.jpg b/frontend/web/thumbs/products/1348490519-4780-1400_list.jpg new file mode 100755 index 0000000..0034a99 Binary files /dev/null and b/frontend/web/thumbs/products/1348490519-4780-1400_list.jpg differ diff --git a/frontend/web/thumbs/products/1348490519-4780-1400_product_variant.jpg b/frontend/web/thumbs/products/1348490519-4780-1400_product_variant.jpg new file mode 100755 index 0000000..af40b94 Binary files /dev/null and b/frontend/web/thumbs/products/1348490519-4780-1400_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1372149258-3554-1909_product_variant.jpg b/frontend/web/thumbs/products/1372149258-3554-1909_product_variant.jpg new file mode 100755 index 0000000..cabd8e8 Binary files /dev/null and b/frontend/web/thumbs/products/1372149258-3554-1909_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1372149318-7194-2076_list.jpg b/frontend/web/thumbs/products/1372149318-7194-2076_list.jpg new file mode 100755 index 0000000..1ceafab Binary files /dev/null and b/frontend/web/thumbs/products/1372149318-7194-2076_list.jpg differ diff --git a/frontend/web/thumbs/products/1372149318-7194-2076_product_variant.jpg b/frontend/web/thumbs/products/1372149318-7194-2076_product_variant.jpg new file mode 100755 index 0000000..c2f75c1 Binary files /dev/null and b/frontend/web/thumbs/products/1372149318-7194-2076_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1377249076-9270-6631_list.jpg b/frontend/web/thumbs/products/1377249076-9270-6631_list.jpg new file mode 100755 index 0000000..d0a2678 Binary files /dev/null and b/frontend/web/thumbs/products/1377249076-9270-6631_list.jpg differ diff --git a/frontend/web/thumbs/products/1377249076-9270-6631_product_variant.jpg b/frontend/web/thumbs/products/1377249076-9270-6631_product_variant.jpg new file mode 100755 index 0000000..1e9da68 Binary files /dev/null and b/frontend/web/thumbs/products/1377249076-9270-6631_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1377249296-3751-4386_product_variant.jpg b/frontend/web/thumbs/products/1377249296-3751-4386_product_variant.jpg new file mode 100755 index 0000000..08169df Binary files /dev/null and b/frontend/web/thumbs/products/1377249296-3751-4386_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1400245944-989-7637_product_variant.jpg b/frontend/web/thumbs/products/1400245944-989-7637_product_variant.jpg new file mode 100755 index 0000000..8841f71 Binary files /dev/null and b/frontend/web/thumbs/products/1400245944-989-7637_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1400245976-5562-1313_product_variant.jpg b/frontend/web/thumbs/products/1400245976-5562-1313_product_variant.jpg new file mode 100755 index 0000000..dbcd4cb Binary files /dev/null and b/frontend/web/thumbs/products/1400245976-5562-1313_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1400246006-6857-6134_list.jpg b/frontend/web/thumbs/products/1400246006-6857-6134_list.jpg new file mode 100755 index 0000000..09b06ef Binary files /dev/null and b/frontend/web/thumbs/products/1400246006-6857-6134_list.jpg differ diff --git a/frontend/web/thumbs/products/1400246006-6857-6134_product_variant.jpg b/frontend/web/thumbs/products/1400246006-6857-6134_product_variant.jpg new file mode 100755 index 0000000..a80f3a4 Binary files /dev/null and b/frontend/web/thumbs/products/1400246006-6857-6134_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1400246503-5557-3138_product_variant.jpg b/frontend/web/thumbs/products/1400246503-5557-3138_product_variant.jpg new file mode 100755 index 0000000..4de3ef7 Binary files /dev/null and b/frontend/web/thumbs/products/1400246503-5557-3138_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1400246533-5133-4445_list.jpg b/frontend/web/thumbs/products/1400246533-5133-4445_list.jpg new file mode 100755 index 0000000..a240cdc Binary files /dev/null and b/frontend/web/thumbs/products/1400246533-5133-4445_list.jpg differ diff --git a/frontend/web/thumbs/products/1400246533-5133-4445_product_variant.jpg b/frontend/web/thumbs/products/1400246533-5133-4445_product_variant.jpg new file mode 100755 index 0000000..090331c Binary files /dev/null and b/frontend/web/thumbs/products/1400246533-5133-4445_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1405413709-3285-8866_list.jpg b/frontend/web/thumbs/products/1405413709-3285-8866_list.jpg new file mode 100755 index 0000000..9ed2bb8 Binary files /dev/null and b/frontend/web/thumbs/products/1405413709-3285-8866_list.jpg differ diff --git a/frontend/web/thumbs/products/1405413709-3285-8866_product_variant.jpg b/frontend/web/thumbs/products/1405413709-3285-8866_product_variant.jpg new file mode 100755 index 0000000..606270e Binary files /dev/null and b/frontend/web/thumbs/products/1405413709-3285-8866_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1405414016-6821-4326_product_variant.jpg b/frontend/web/thumbs/products/1405414016-6821-4326_product_variant.jpg new file mode 100755 index 0000000..1382485 Binary files /dev/null and b/frontend/web/thumbs/products/1405414016-6821-4326_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1405414079-7858-4191_list.jpg b/frontend/web/thumbs/products/1405414079-7858-4191_list.jpg new file mode 100755 index 0000000..ff1aad6 Binary files /dev/null and b/frontend/web/thumbs/products/1405414079-7858-4191_list.jpg differ diff --git a/frontend/web/thumbs/products/1405414079-7858-4191_product_variant.jpg b/frontend/web/thumbs/products/1405414079-7858-4191_product_variant.jpg new file mode 100755 index 0000000..4739c56 Binary files /dev/null and b/frontend/web/thumbs/products/1405414079-7858-4191_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1405415358-1403-7356_list.jpg b/frontend/web/thumbs/products/1405415358-1403-7356_list.jpg new file mode 100755 index 0000000..473f8a5 Binary files /dev/null and b/frontend/web/thumbs/products/1405415358-1403-7356_list.jpg differ diff --git a/frontend/web/thumbs/products/1405415358-1403-7356_product_variant.jpg b/frontend/web/thumbs/products/1405415358-1403-7356_product_variant.jpg new file mode 100755 index 0000000..c2da07c Binary files /dev/null and b/frontend/web/thumbs/products/1405415358-1403-7356_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1414659878-9263-4749_list.jpg b/frontend/web/thumbs/products/1414659878-9263-4749_list.jpg new file mode 100755 index 0000000..3936f95 Binary files /dev/null and b/frontend/web/thumbs/products/1414659878-9263-4749_list.jpg differ diff --git a/frontend/web/thumbs/products/1414659878-9263-4749_product_variant.jpg b/frontend/web/thumbs/products/1414659878-9263-4749_product_variant.jpg new file mode 100755 index 0000000..e51fa5a Binary files /dev/null and b/frontend/web/thumbs/products/1414659878-9263-4749_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/1429176953-5623-363_list.jpg b/frontend/web/thumbs/products/1429176953-5623-363_list.jpg new file mode 100755 index 0000000..edb68af Binary files /dev/null and b/frontend/web/thumbs/products/1429176953-5623-363_list.jpg differ diff --git a/frontend/web/thumbs/products/1429176953-5623-363_product_variant.jpg b/frontend/web/thumbs/products/1429176953-5623-363_product_variant.jpg new file mode 100755 index 0000000..3dbaebd Binary files /dev/null and b/frontend/web/thumbs/products/1429176953-5623-363_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_all-sumer-11-40_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_all-sumer-11-40_2_product_variant.jpg new file mode 100755 index 0000000..9ca1bee Binary files /dev/null and b/frontend/web/thumbs/products/dakine_all-sumer-11-40_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_all-sumer-11-40_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_all-sumer-11-40_3_product_variant.jpg new file mode 100755 index 0000000..acbe410 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_all-sumer-11-40_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_all-sumer-11-40_4_product_variant.jpg b/frontend/web/thumbs/products/dakine_all-sumer-11-40_4_product_variant.jpg new file mode 100755 index 0000000..5c43fff Binary files /dev/null and b/frontend/web/thumbs/products/dakine_all-sumer-11-40_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_all-sumer-11-40_product_variant.jpg b/frontend/web/thumbs/products/dakine_all-sumer-11-40_product_variant.jpg new file mode 100755 index 0000000..ea1a408 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_all-sumer-11-40_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw-15-doprihod_23_list.jpg b/frontend/web/thumbs/products/dakine_fw-15-doprihod_23_list.jpg new file mode 100755 index 0000000..dfcd871 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw-15-doprihod_23_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw-15-doprihod_23_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw-15-doprihod_23_product_variant.jpg new file mode 100755 index 0000000..02774e1 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw-15-doprihod_23_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-20_3_list.jpg b/frontend/web/thumbs/products/dakine_fw13-20_3_list.jpg new file mode 100755 index 0000000..f1b1cfb Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-20_3_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-20_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-20_3_product_variant.jpg new file mode 100755 index 0000000..d812016 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-20_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-2_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-2_2_product_variant.jpg new file mode 100755 index 0000000..b4a83a1 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-2_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-2_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-2_3_product_variant.jpg new file mode 100755 index 0000000..df6727d Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-2_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-2_4_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-2_4_product_variant.jpg new file mode 100755 index 0000000..583733b Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-2_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-2_6_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-2_6_product_variant.jpg new file mode 100755 index 0000000..ad8a353 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-2_6_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-2_7_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-2_7_product_variant.jpg new file mode 100755 index 0000000..11d6a54 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-2_7_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-2_product_variant.jpg new file mode 100755 index 0000000..776da41 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-3_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-3_2_product_variant.jpg new file mode 100755 index 0000000..4e18be8 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-3_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-3_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-3_3_product_variant.jpg new file mode 100755 index 0000000..a6d0a90 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-3_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-3_5_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-3_5_product_variant.jpg new file mode 100755 index 0000000..d2371df Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-3_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-45_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-45_2_product_variant.jpg new file mode 100755 index 0000000..79d7b39 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-45_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-45_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-45_3_product_variant.jpg new file mode 100755 index 0000000..453c24c Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-45_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-45_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-45_product_variant.jpg new file mode 100755 index 0000000..921808c Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-45_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_2_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_fw13-4_2_product_trumb2.jpg new file mode 100755 index 0000000..f3ecf33 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_2_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-4_2_product_variant.jpg new file mode 100755 index 0000000..beda4a1 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_3_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_fw13-4_3_product_trumb2.jpg new file mode 100755 index 0000000..0a00407 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_3_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-4_3_product_variant.jpg new file mode 100755 index 0000000..0fac86c Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_4_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_fw13-4_4_product_trumb2.jpg new file mode 100755 index 0000000..a4c9ccd Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_4_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_4_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-4_4_product_variant.jpg new file mode 100755 index 0000000..b7b2555 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_5_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_fw13-4_5_product_trumb2.jpg new file mode 100755 index 0000000..962a9a7 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_5_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_5_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-4_5_product_variant.jpg new file mode 100755 index 0000000..c2819d1 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_6_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_fw13-4_6_product_trumb2.jpg new file mode 100755 index 0000000..cc2b990 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_6_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_6_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-4_6_product_variant.jpg new file mode 100755 index 0000000..8be0e20 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_6_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_7_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_fw13-4_7_product_trumb2.jpg new file mode 100755 index 0000000..ea81ea4 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_7_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_7_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-4_7_product_variant.jpg new file mode 100755 index 0000000..861e072 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_7_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_8_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_fw13-4_8_product_trumb2.jpg new file mode 100755 index 0000000..5b9fd2e Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_8_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_8_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-4_8_product_variant.jpg new file mode 100755 index 0000000..f4a1a6a Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_8_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_fw13-4_product_trumb2.jpg new file mode 100755 index 0000000..f0fb4d5 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13-4_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13-4_product_variant.jpg new file mode 100755 index 0000000..4cb3c57 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13-4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13_2_product_variant.jpg new file mode 100755 index 0000000..aab57d8 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13_3_product_variant.jpg new file mode 100755 index 0000000..cfd30fa Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13_4_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13_4_2_product_variant.jpg new file mode 100755 index 0000000..1a2ef36 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13_4_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw13_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw13_product_variant.jpg new file mode 100755 index 0000000..67632df Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw13_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-23_2_list.jpg b/frontend/web/thumbs/products/dakine_fw_15-23_2_list.jpg new file mode 100755 index 0000000..1e3c222 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-23_2_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-23_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-23_2_product_variant.jpg new file mode 100755 index 0000000..5ae1ee0 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-23_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-23_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-23_product_variant.jpg new file mode 100755 index 0000000..a0eef8b Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-23_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-30_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-30_2_product_variant.jpg new file mode 100755 index 0000000..35d14c9 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-30_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-30_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-30_3_product_variant.jpg new file mode 100755 index 0000000..eec7da5 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-30_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-30_4_list.jpg b/frontend/web/thumbs/products/dakine_fw_15-30_4_list.jpg new file mode 100755 index 0000000..9be5e2b Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-30_4_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-30_4_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-30_4_product_variant.jpg new file mode 100755 index 0000000..60f7691 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-30_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-30_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-30_product_variant.jpg new file mode 100755 index 0000000..91a2881 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-30_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-36_10_list.jpg b/frontend/web/thumbs/products/dakine_fw_15-36_10_list.jpg new file mode 100755 index 0000000..9670a42 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-36_10_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-36_10_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-36_10_product_variant.jpg new file mode 100755 index 0000000..e2febcd Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-36_10_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-36_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-36_2_product_variant.jpg new file mode 100755 index 0000000..4886c69 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-36_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-36_4_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-36_4_product_variant.jpg new file mode 100755 index 0000000..d32926e Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-36_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-36_5_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-36_5_product_variant.jpg new file mode 100755 index 0000000..df8fb6d Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-36_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-36_6_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-36_6_product_variant.jpg new file mode 100755 index 0000000..1a11f39 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-36_6_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-36_7_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-36_7_product_variant.jpg new file mode 100755 index 0000000..62a0a1f Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-36_7_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-36_8_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-36_8_product_variant.jpg new file mode 100755 index 0000000..6a263f3 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-36_8_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-36_9_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-36_9_product_variant.jpg new file mode 100755 index 0000000..e5317d5 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-36_9_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-36_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-36_product_variant.jpg new file mode 100755 index 0000000..905473f Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-36_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-45_list.jpg b/frontend/web/thumbs/products/dakine_fw_15-45_list.jpg new file mode 100755 index 0000000..f5ce1d8 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-45_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-45_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-45_product_variant.jpg new file mode 100755 index 0000000..ca29764 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-45_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-46_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-46_2_product_variant.jpg new file mode 100755 index 0000000..074c2ef Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-46_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-46_3_list.jpg b/frontend/web/thumbs/products/dakine_fw_15-46_3_list.jpg new file mode 100755 index 0000000..fd28aa4 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-46_3_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-46_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-46_3_product_variant.jpg new file mode 100755 index 0000000..34727c1 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-46_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-46_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-46_product_variant.jpg new file mode 100755 index 0000000..37b4b3a Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-46_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-52_2_list.jpg b/frontend/web/thumbs/products/dakine_fw_15-52_2_list.jpg new file mode 100755 index 0000000..d4690ab Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-52_2_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-52_2_product.jpg b/frontend/web/thumbs/products/dakine_fw_15-52_2_product.jpg new file mode 100755 index 0000000..ffad12d Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-52_2_product.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-52_2_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_fw_15-52_2_product_trumb2.jpg new file mode 100755 index 0000000..658e3d2 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-52_2_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-52_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-52_2_product_variant.jpg new file mode 100755 index 0000000..d212d45 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-52_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-52_3_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_fw_15-52_3_product_trumb2.jpg new file mode 100755 index 0000000..b64e4a8 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-52_3_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-52_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-52_3_product_variant.jpg new file mode 100755 index 0000000..1d22743 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-52_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-52_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_fw_15-52_product_trumb2.jpg new file mode 100755 index 0000000..72e5321 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-52_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-52_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-52_product_variant.jpg new file mode 100755 index 0000000..63307c0 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-52_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-99_2_list.jpg b/frontend/web/thumbs/products/dakine_fw_15-99_2_list.jpg new file mode 100755 index 0000000..aa778e8 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-99_2_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_fw_15-99_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_fw_15-99_2_product_variant.jpg new file mode 100755 index 0000000..5f79e12 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_fw_15-99_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-102_2_list.jpg b/frontend/web/thumbs/products/dakine_ss-14-102_2_list.jpg new file mode 100755 index 0000000..ae1f832 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-102_2_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-102_2_product.jpg b/frontend/web/thumbs/products/dakine_ss-14-102_2_product.jpg new file mode 100755 index 0000000..84b5347 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-102_2_product.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-102_2_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_ss-14-102_2_product_trumb2.jpg new file mode 100755 index 0000000..7e02521 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-102_2_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-102_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss-14-102_2_product_variant.jpg new file mode 100755 index 0000000..2f74b57 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-102_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-102_product_trumb2.jpg b/frontend/web/thumbs/products/dakine_ss-14-102_product_trumb2.jpg new file mode 100755 index 0000000..1eaf528 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-102_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-102_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss-14-102_product_variant.jpg new file mode 100755 index 0000000..d41d965 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-102_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-103_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss-14-103_2_product_variant.jpg new file mode 100755 index 0000000..7630a29 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-103_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-103_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss-14-103_3_product_variant.jpg new file mode 100755 index 0000000..40aad5a Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-103_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-103_4_list.jpg b/frontend/web/thumbs/products/dakine_ss-14-103_4_list.jpg new file mode 100755 index 0000000..cb8bf5d Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-103_4_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-103_4_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss-14-103_4_product_variant.jpg new file mode 100755 index 0000000..9baebc6 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-103_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-103_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss-14-103_product_variant.jpg new file mode 100755 index 0000000..6d3fa00 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-103_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-104_list.jpg b/frontend/web/thumbs/products/dakine_ss-14-104_list.jpg new file mode 100755 index 0000000..1fad022 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-104_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-104_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss-14-104_product_variant.jpg new file mode 100755 index 0000000..52d214e Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-104_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-105_2_list.jpg b/frontend/web/thumbs/products/dakine_ss-14-105_2_list.jpg new file mode 100755 index 0000000..51c2388 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-105_2_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-105_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss-14-105_2_product_variant.jpg new file mode 100755 index 0000000..4b1ee42 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-105_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss-14-105_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss-14-105_product_variant.jpg new file mode 100755 index 0000000..5353911 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss-14-105_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-94_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss_15-94_2_product_variant.jpg new file mode 100755 index 0000000..f4a6814 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-94_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-94_3_list.jpg b/frontend/web/thumbs/products/dakine_ss_15-94_3_list.jpg new file mode 100755 index 0000000..fde8b9d Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-94_3_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-94_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss_15-94_3_product_variant.jpg new file mode 100755 index 0000000..67154d3 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-94_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-94_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss_15-94_product_variant.jpg new file mode 100755 index 0000000..7241ed2 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-94_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-95_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss_15-95_2_product_variant.jpg new file mode 100755 index 0000000..b25d3dd Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-95_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-95_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss_15-95_3_product_variant.jpg new file mode 100755 index 0000000..a2ac066 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-95_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-95_4_list.jpg b/frontend/web/thumbs/products/dakine_ss_15-95_4_list.jpg new file mode 100755 index 0000000..d65eeff Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-95_4_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-95_4_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss_15-95_4_product_variant.jpg new file mode 100755 index 0000000..c6b499d Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-95_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-95_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss_15-95_product_variant.jpg new file mode 100755 index 0000000..14282c9 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-95_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-96_2_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss_15-96_2_product_variant.jpg new file mode 100755 index 0000000..9756aa2 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-96_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-96_3_list.jpg b/frontend/web/thumbs/products/dakine_ss_15-96_3_list.jpg new file mode 100755 index 0000000..edc3eb6 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-96_3_list.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-96_3_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss_15-96_3_product_variant.jpg new file mode 100755 index 0000000..ebfdfb4 Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-96_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dakine_ss_15-96_product_variant.jpg b/frontend/web/thumbs/products/dakine_ss_15-96_product_variant.jpg new file mode 100755 index 0000000..28fb42a Binary files /dev/null and b/frontend/web/thumbs/products/dakine_ss_15-96_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/deuter_lasportiv_ss14-45_2_list.jpg b/frontend/web/thumbs/products/deuter_lasportiv_ss14-45_2_list.jpg new file mode 100755 index 0000000..b1f2134 Binary files /dev/null and b/frontend/web/thumbs/products/deuter_lasportiv_ss14-45_2_list.jpg differ diff --git a/frontend/web/thumbs/products/deuter_lasportiv_ss14-45_2_product_variant.jpg b/frontend/web/thumbs/products/deuter_lasportiv_ss14-45_2_product_variant.jpg new file mode 100755 index 0000000..1cc64d6 Binary files /dev/null and b/frontend/web/thumbs/products/deuter_lasportiv_ss14-45_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/deuter_lasportiv_ss14-45_product_variant.jpg b/frontend/web/thumbs/products/deuter_lasportiv_ss14-45_product_variant.jpg new file mode 100755 index 0000000..63aabc2 Binary files /dev/null and b/frontend/web/thumbs/products/deuter_lasportiv_ss14-45_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_FW-12-45_3_product_variant.jpg b/frontend/web/thumbs/products/dk_FW-12-45_3_product_variant.jpg new file mode 100755 index 0000000..c2eaf52 Binary files /dev/null and b/frontend/web/thumbs/products/dk_FW-12-45_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_FW-12-45_4_list.jpg b/frontend/web/thumbs/products/dk_FW-12-45_4_list.jpg new file mode 100755 index 0000000..ffd12e5 Binary files /dev/null and b/frontend/web/thumbs/products/dk_FW-12-45_4_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_FW-12-45_4_product_variant.jpg b/frontend/web/thumbs/products/dk_FW-12-45_4_product_variant.jpg new file mode 100755 index 0000000..338b8bb Binary files /dev/null and b/frontend/web/thumbs/products/dk_FW-12-45_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_FW-12-45_product_variant.jpg b/frontend/web/thumbs/products/dk_FW-12-45_product_variant.jpg new file mode 100755 index 0000000..9cf7984 Binary files /dev/null and b/frontend/web/thumbs/products/dk_FW-12-45_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14-113_2_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14-113_2_product_variant.jpg new file mode 100755 index 0000000..ec36b03 Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14-113_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14-113_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14-113_product_variant.jpg new file mode 100755 index 0000000..8ac50a9 Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14-113_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14-146_2_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14-146_2_product_variant.jpg new file mode 100755 index 0000000..4e29d8c Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14-146_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14-146_3_list.jpg b/frontend/web/thumbs/products/dk_fw_14-146_3_list.jpg new file mode 100755 index 0000000..add2524 Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14-146_3_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14-146_3_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14-146_3_product_variant.jpg new file mode 100755 index 0000000..223a5a1 Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14-146_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14-146_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14-146_product_variant.jpg new file mode 100755 index 0000000..de5ad6d Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14-146_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14-209_30_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14-209_30_product_variant.jpg new file mode 100755 index 0000000..349e0f6 Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14-209_30_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14-209_31_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14-209_31_product_variant.jpg new file mode 100755 index 0000000..943ce74 Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14-209_31_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14-29_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14-29_product_variant.jpg new file mode 100755 index 0000000..7cc165f Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14-29_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14-33_2_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14-33_2_product_variant.jpg new file mode 100755 index 0000000..440aa02 Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14-33_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14-33_4_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14-33_4_product_variant.jpg new file mode 100755 index 0000000..1cade09 Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14-33_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14-33_5_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14-33_5_product_variant.jpg new file mode 100755 index 0000000..ba2f944 Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14-33_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14_5_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14_5_product_variant.jpg new file mode 100755 index 0000000..c6e34b3 Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_fw_14_6_product_variant.jpg b/frontend/web/thumbs/products/dk_fw_14_6_product_variant.jpg new file mode 100755 index 0000000..0c426e3 Binary files /dev/null and b/frontend/web/thumbs/products/dk_fw_14_6_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_pack-11_88-2_list.jpg b/frontend/web/thumbs/products/dk_pack-11_88-2_list.jpg new file mode 100755 index 0000000..1e399af Binary files /dev/null and b/frontend/web/thumbs/products/dk_pack-11_88-2_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_pack-11_88-2_product_variant.jpg b/frontend/web/thumbs/products/dk_pack-11_88-2_product_variant.jpg new file mode 100755 index 0000000..c417e48 Binary files /dev/null and b/frontend/web/thumbs/products/dk_pack-11_88-2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_pack-11_88_product_variant.jpg b/frontend/web/thumbs/products/dk_pack-11_88_product_variant.jpg new file mode 100755 index 0000000..f33d6ac Binary files /dev/null and b/frontend/web/thumbs/products/dk_pack-11_88_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_14_2_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_14_2_product_variant.jpg new file mode 100755 index 0000000..0cb39ce Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_14_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_14_3_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_14_3_product_variant.jpg new file mode 100755 index 0000000..4195dce Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_14_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_14_4_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_14_4_product_variant.jpg new file mode 100755 index 0000000..8e398b8 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_14_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_14_5_list.jpg b/frontend/web/thumbs/products/dk_ss-all_13_14_5_list.jpg new file mode 100755 index 0000000..a92bcc5 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_14_5_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_14_5_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_14_5_product_variant.jpg new file mode 100755 index 0000000..da68741 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_14_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_14_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_14_product_variant.jpg new file mode 100755 index 0000000..670cfcb Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_14_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_2_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_2_product_trumb2.jpg new file mode 100755 index 0000000..ad04e60 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_2_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_2_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_2_product_variant.jpg new file mode 100755 index 0000000..ee7ff46 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_3_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_3_product_trumb2.jpg new file mode 100755 index 0000000..7a1de7c Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_3_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_3_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_3_product_variant.jpg new file mode 100755 index 0000000..05f40c4 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_4_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_4_product_trumb2.jpg new file mode 100755 index 0000000..ee0b0e5 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_4_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_4_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_4_product_variant.jpg new file mode 100755 index 0000000..3f61fbb Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_6_list.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_6_list.jpg new file mode 100755 index 0000000..152f6c7 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_6_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_6_product.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_6_product.jpg new file mode 100755 index 0000000..dbdf18f Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_6_product.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_6_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_6_product_trumb2.jpg new file mode 100755 index 0000000..3c5d924 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_6_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_6_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_6_product_variant.jpg new file mode 100755 index 0000000..7391aad Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_6_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_7_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_7_product_trumb2.jpg new file mode 100755 index 0000000..afe3480 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_7_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_7_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_7_product_variant.jpg new file mode 100755 index 0000000..9f1c94d Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_7_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_product_trumb2.jpg new file mode 100755 index 0000000..3317509 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_15_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_15_product_variant.jpg new file mode 100755 index 0000000..0f25773 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_15_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_53_list.jpg b/frontend/web/thumbs/products/dk_ss-all_13_53_list.jpg new file mode 100755 index 0000000..283cd6a Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_53_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_53_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_53_product_variant.jpg new file mode 100755 index 0000000..10b0037 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_53_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_5_2_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_5_2_product_variant.jpg new file mode 100755 index 0000000..e0f38ce Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_5_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_5_3_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_5_3_product_variant.jpg new file mode 100755 index 0000000..3bc2c9b Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_5_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_5_4_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_5_4_product_variant.jpg new file mode 100755 index 0000000..98d8a00 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_5_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_5_5_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_5_5_product_variant.jpg new file mode 100755 index 0000000..dc70e9c Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_5_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_5_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_5_product_variant.jpg new file mode 100755 index 0000000..8d6ec80 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_65_2_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_65_2_product_variant.jpg new file mode 100755 index 0000000..ae14a9f Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_65_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_65_3_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_65_3_product_variant.jpg new file mode 100755 index 0000000..11b813a Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_65_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_65_4_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_65_4_product_variant.jpg new file mode 100755 index 0000000..49d3470 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_65_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_65_list.jpg b/frontend/web/thumbs/products/dk_ss-all_13_65_list.jpg new file mode 100755 index 0000000..046cfef Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_65_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_65_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_65_product_variant.jpg new file mode 100755 index 0000000..993ba41 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_65_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_6_2_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_6_2_product_variant.jpg new file mode 100755 index 0000000..675eb74 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_6_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_6_4_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_6_4_product_variant.jpg new file mode 100755 index 0000000..4083dad Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_6_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_6_5_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_6_5_product_variant.jpg new file mode 100755 index 0000000..0c6dbf0 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_6_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_6_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_6_product_variant.jpg new file mode 100755 index 0000000..c19670e Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_6_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_79_2_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_79_2_product_variant.jpg new file mode 100755 index 0000000..b61a523 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_79_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_79_3_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_79_3_product_variant.jpg new file mode 100755 index 0000000..01700fc Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_79_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_79_4_list.jpg b/frontend/web/thumbs/products/dk_ss-all_13_79_4_list.jpg new file mode 100755 index 0000000..f16e339 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_79_4_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_79_4_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_79_4_product_variant.jpg new file mode 100755 index 0000000..bac1a95 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_79_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_79_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_79_product_variant.jpg new file mode 100755 index 0000000..2c94d74 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_79_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_83_2_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_83_2_product_variant.jpg new file mode 100755 index 0000000..cefa138 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_83_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_83_3_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_83_3_product_variant.jpg new file mode 100755 index 0000000..677a52c Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_83_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_83_4_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_83_4_product_variant.jpg new file mode 100755 index 0000000..b0287ea Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_83_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_83_5_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_83_5_product_variant.jpg new file mode 100755 index 0000000..fd59abd Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_83_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_83_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_83_product_variant.jpg new file mode 100755 index 0000000..2b3381b Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_83_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_2_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_2_product_trumb2.jpg new file mode 100755 index 0000000..9e1f92e Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_2_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_2_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_2_product_variant.jpg new file mode 100755 index 0000000..331abe6 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_3_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_3_product_trumb2.jpg new file mode 100755 index 0000000..5f98776 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_3_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_3_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_3_product_variant.jpg new file mode 100755 index 0000000..26b024e Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_4_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_4_product_trumb2.jpg new file mode 100755 index 0000000..8fbc44e Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_4_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_4_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_4_product_variant.jpg new file mode 100755 index 0000000..afe0dc0 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_5_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_5_product_trumb2.jpg new file mode 100755 index 0000000..9581cff Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_5_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_5_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_5_product_variant.jpg new file mode 100755 index 0000000..6871071 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_6_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_6_product_trumb2.jpg new file mode 100755 index 0000000..a62150a Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_6_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_6_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_6_product_variant.jpg new file mode 100755 index 0000000..1a40f9b Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_6_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_7_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_7_product_trumb2.jpg new file mode 100755 index 0000000..27c6f4e Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_7_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_7_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_7_product_variant.jpg new file mode 100755 index 0000000..8723a98 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_7_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_8_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_8_product_trumb2.jpg new file mode 100755 index 0000000..f21bf54 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_8_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_8_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_8_product_variant.jpg new file mode 100755 index 0000000..926652b Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_8_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_9_list.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_9_list.jpg new file mode 100755 index 0000000..7b0f3e7 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_9_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_9_product.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_9_product.jpg new file mode 100755 index 0000000..9c05e1f Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_9_product.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_9_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_9_product_trumb2.jpg new file mode 100755 index 0000000..afdbdbf Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_9_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_9_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_9_product_variant.jpg new file mode 100755 index 0000000..a0f1366 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_9_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_product_trumb2.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_product_trumb2.jpg new file mode 100755 index 0000000..3e43436 Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_ss-all_13_8_product_variant.jpg b/frontend/web/thumbs/products/dk_ss-all_13_8_product_variant.jpg new file mode 100755 index 0000000..693d01d Binary files /dev/null and b/frontend/web/thumbs/products/dk_ss-all_13_8_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-26_2_list.jpg b/frontend/web/thumbs/products/dk_sumer-12-26_2_list.jpg new file mode 100755 index 0000000..37c8827 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-26_2_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-26_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-26_2_product_variant.jpg new file mode 100755 index 0000000..4de22db Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-26_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-26_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-26_product_variant.jpg new file mode 100755 index 0000000..581cadf Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-26_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-28_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-28_2_product_variant.jpg new file mode 100755 index 0000000..dd5a9ae Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-28_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-28_3_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-28_3_product_variant.jpg new file mode 100755 index 0000000..68e7ccf Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-28_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-28_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-28_product_variant.jpg new file mode 100755 index 0000000..6b7fca6 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-28_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-30_2_list.jpg b/frontend/web/thumbs/products/dk_sumer-12-30_2_list.jpg new file mode 100755 index 0000000..0b161e7 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-30_2_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-30_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-30_2_product_variant.jpg new file mode 100755 index 0000000..df2130f Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-30_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-30_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-30_product_variant.jpg new file mode 100755 index 0000000..13158cb Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-30_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-32_2_list.jpg b/frontend/web/thumbs/products/dk_sumer-12-32_2_list.jpg new file mode 100755 index 0000000..6d55517 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-32_2_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-32_2_product.jpg b/frontend/web/thumbs/products/dk_sumer-12-32_2_product.jpg new file mode 100755 index 0000000..90853c0 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-32_2_product.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-32_2_product_trumb2.jpg b/frontend/web/thumbs/products/dk_sumer-12-32_2_product_trumb2.jpg new file mode 100755 index 0000000..6877d9a Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-32_2_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-32_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-32_2_product_variant.jpg new file mode 100755 index 0000000..ad033e4 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-32_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-32_3_product_trumb2.jpg b/frontend/web/thumbs/products/dk_sumer-12-32_3_product_trumb2.jpg new file mode 100755 index 0000000..ae6d7e9 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-32_3_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-32_3_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-32_3_product_variant.jpg new file mode 100755 index 0000000..f99539d Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-32_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-32_4_product_trumb2.jpg b/frontend/web/thumbs/products/dk_sumer-12-32_4_product_trumb2.jpg new file mode 100755 index 0000000..0318ec3 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-32_4_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-32_4_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-32_4_product_variant.jpg new file mode 100755 index 0000000..faf0007 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-32_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-32_product_trumb2.jpg b/frontend/web/thumbs/products/dk_sumer-12-32_product_trumb2.jpg new file mode 100755 index 0000000..82a531a Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-32_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-32_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-32_product_variant.jpg new file mode 100755 index 0000000..a0e5a2c Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-32_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-35_2_list.jpg b/frontend/web/thumbs/products/dk_sumer-12-35_2_list.jpg new file mode 100755 index 0000000..33aad94 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-35_2_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-35_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-35_2_product_variant.jpg new file mode 100755 index 0000000..42011ce Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-35_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-35_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-35_product_variant.jpg new file mode 100755 index 0000000..5c94f4e Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-35_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-36_list.jpg b/frontend/web/thumbs/products/dk_sumer-12-36_list.jpg new file mode 100755 index 0000000..789ee24 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-36_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-36_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-36_product_variant.jpg new file mode 100755 index 0000000..a357bff Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-36_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-40_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-40_2_product_variant.jpg new file mode 100755 index 0000000..7f49e8e Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-40_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-40_3_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-40_3_product_variant.jpg new file mode 100755 index 0000000..cbf4d23 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-40_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-40_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-40_product_variant.jpg new file mode 100755 index 0000000..e047518 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-40_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-41_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-41_2_product_variant.jpg new file mode 100755 index 0000000..639461f Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-41_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-41_3_list.jpg b/frontend/web/thumbs/products/dk_sumer-12-41_3_list.jpg new file mode 100755 index 0000000..26590ca Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-41_3_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-41_3_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-41_3_product_variant.jpg new file mode 100755 index 0000000..0b932ed Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-41_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-41_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-41_product_variant.jpg new file mode 100755 index 0000000..d02715a Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-41_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-42_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-42_2_product_variant.jpg new file mode 100755 index 0000000..a18570d Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-42_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-42_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-42_product_variant.jpg new file mode 100755 index 0000000..9a200a7 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-42_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-50_2_product_trumb2.jpg b/frontend/web/thumbs/products/dk_sumer-12-50_2_product_trumb2.jpg new file mode 100755 index 0000000..7c13f6f Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-50_2_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-50_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-50_2_product_variant.jpg new file mode 100755 index 0000000..7639e42 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-50_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-50_3_list.jpg b/frontend/web/thumbs/products/dk_sumer-12-50_3_list.jpg new file mode 100755 index 0000000..e8196e7 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-50_3_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-50_3_product.jpg b/frontend/web/thumbs/products/dk_sumer-12-50_3_product.jpg new file mode 100755 index 0000000..e898cff Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-50_3_product.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-50_3_product_trumb2.jpg b/frontend/web/thumbs/products/dk_sumer-12-50_3_product_trumb2.jpg new file mode 100755 index 0000000..a42e4fb Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-50_3_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-50_3_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-50_3_product_variant.jpg new file mode 100755 index 0000000..d60c71a Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-50_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-50_product_trumb2.jpg b/frontend/web/thumbs/products/dk_sumer-12-50_product_trumb2.jpg new file mode 100755 index 0000000..d89be55 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-50_product_trumb2.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-50_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-50_product_variant.jpg new file mode 100755 index 0000000..86b616f Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-50_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-57_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-57_2_product_variant.jpg new file mode 100755 index 0000000..b73e881 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-57_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-57_3_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-57_3_product_variant.jpg new file mode 100755 index 0000000..28d2090 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-57_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-57_4_list.jpg b/frontend/web/thumbs/products/dk_sumer-12-57_4_list.jpg new file mode 100755 index 0000000..1c6a52f Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-57_4_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-57_4_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-57_4_product_variant.jpg new file mode 100755 index 0000000..c0def88 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-57_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-57_5_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-57_5_product_variant.jpg new file mode 100755 index 0000000..133f026 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-57_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-57_6_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-57_6_product_variant.jpg new file mode 100755 index 0000000..9ba15c2 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-57_6_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-57_7_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-57_7_product_variant.jpg new file mode 100755 index 0000000..ce6d949 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-57_7_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-57_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-57_product_variant.jpg new file mode 100755 index 0000000..282cdcd Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-57_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-63_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-63_2_product_variant.jpg new file mode 100755 index 0000000..0ae6d38 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-63_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-63_3_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-63_3_product_variant.jpg new file mode 100755 index 0000000..9c03b93 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-63_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-63_4_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-63_4_product_variant.jpg new file mode 100755 index 0000000..4bc6d81 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-63_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-63_5_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-63_5_product_variant.jpg new file mode 100755 index 0000000..5fc09da Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-63_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-6_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-6_2_product_variant.jpg new file mode 100755 index 0000000..7b1e065 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-6_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-6_3_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-6_3_product_variant.jpg new file mode 100755 index 0000000..e2cbc92 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-6_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-6_4_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-6_4_product_variant.jpg new file mode 100755 index 0000000..6996428 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-6_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-6_5_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-6_5_product_variant.jpg new file mode 100755 index 0000000..00e1bd2 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-6_5_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-6_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-6_product_variant.jpg new file mode 100755 index 0000000..ee5d8bd Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-6_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-7_2_list.jpg b/frontend/web/thumbs/products/dk_sumer-12-7_2_list.jpg new file mode 100755 index 0000000..263688d Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-7_2_list.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-7_2_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-7_2_product_variant.jpg new file mode 100755 index 0000000..b25fc62 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-7_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/dk_sumer-12-7_product_variant.jpg b/frontend/web/thumbs/products/dk_sumer-12-7_product_variant.jpg new file mode 100755 index 0000000..4a1ca74 Binary files /dev/null and b/frontend/web/thumbs/products/dk_sumer-12-7_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/head_fw13_276_list.jpg b/frontend/web/thumbs/products/head_fw13_276_list.jpg new file mode 100755 index 0000000..156639c Binary files /dev/null and b/frontend/web/thumbs/products/head_fw13_276_list.jpg differ diff --git a/frontend/web/thumbs/products/head_fw13_276_product_variant.jpg b/frontend/web/thumbs/products/head_fw13_276_product_variant.jpg new file mode 100755 index 0000000..135a12a Binary files /dev/null and b/frontend/web/thumbs/products/head_fw13_276_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/qs_kurtka-11_251-2_product_variant.jpg b/frontend/web/thumbs/products/qs_kurtka-11_251-2_product_variant.jpg new file mode 100755 index 0000000..08060da Binary files /dev/null and b/frontend/web/thumbs/products/qs_kurtka-11_251-2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/qs_kurtka-11_251-3_list.jpg b/frontend/web/thumbs/products/qs_kurtka-11_251-3_list.jpg new file mode 100755 index 0000000..977e542 Binary files /dev/null and b/frontend/web/thumbs/products/qs_kurtka-11_251-3_list.jpg differ diff --git a/frontend/web/thumbs/products/qs_kurtka-11_251-3_product_variant.jpg b/frontend/web/thumbs/products/qs_kurtka-11_251-3_product_variant.jpg new file mode 100755 index 0000000..bf70850 Binary files /dev/null and b/frontend/web/thumbs/products/qs_kurtka-11_251-3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/qs_kurtka-11_251_product_variant.jpg b/frontend/web/thumbs/products/qs_kurtka-11_251_product_variant.jpg new file mode 100755 index 0000000..581ef9b Binary files /dev/null and b/frontend/web/thumbs/products/qs_kurtka-11_251_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/qs_roxy_dc_fw-15-50_2_list.jpg b/frontend/web/thumbs/products/qs_roxy_dc_fw-15-50_2_list.jpg new file mode 100755 index 0000000..a6e8326 Binary files /dev/null and b/frontend/web/thumbs/products/qs_roxy_dc_fw-15-50_2_list.jpg differ diff --git a/frontend/web/thumbs/products/qs_roxy_dc_fw-15-50_2_product_variant.jpg b/frontend/web/thumbs/products/qs_roxy_dc_fw-15-50_2_product_variant.jpg new file mode 100755 index 0000000..993bf57 Binary files /dev/null and b/frontend/web/thumbs/products/qs_roxy_dc_fw-15-50_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/qs_roxy_dc_fw-15-50_product_variant.jpg b/frontend/web/thumbs/products/qs_roxy_dc_fw-15-50_product_variant.jpg new file mode 100755 index 0000000..d37397e Binary files /dev/null and b/frontend/web/thumbs/products/qs_roxy_dc_fw-15-50_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/qs_roxy_dc_fw-15-61_2_list.jpg b/frontend/web/thumbs/products/qs_roxy_dc_fw-15-61_2_list.jpg new file mode 100755 index 0000000..02430d4 Binary files /dev/null and b/frontend/web/thumbs/products/qs_roxy_dc_fw-15-61_2_list.jpg differ diff --git a/frontend/web/thumbs/products/qs_roxy_dc_fw-15-61_2_product_variant.jpg b/frontend/web/thumbs/products/qs_roxy_dc_fw-15-61_2_product_variant.jpg new file mode 100755 index 0000000..d997228 Binary files /dev/null and b/frontend/web/thumbs/products/qs_roxy_dc_fw-15-61_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/qs_roxy_dc_fw-15-61_product_variant.jpg b/frontend/web/thumbs/products/qs_roxy_dc_fw-15-61_product_variant.jpg new file mode 100755 index 0000000..545592a Binary files /dev/null and b/frontend/web/thumbs/products/qs_roxy_dc_fw-15-61_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/rs_od-hard-fw_14_292_list.jpg b/frontend/web/thumbs/products/rs_od-hard-fw_14_292_list.jpg new file mode 100755 index 0000000..d58a177 Binary files /dev/null and b/frontend/web/thumbs/products/rs_od-hard-fw_14_292_list.jpg differ diff --git a/frontend/web/thumbs/products/rs_od-hard-fw_14_292_product_variant.jpg b/frontend/web/thumbs/products/rs_od-hard-fw_14_292_product_variant.jpg new file mode 100755 index 0000000..828f54b Binary files /dev/null and b/frontend/web/thumbs/products/rs_od-hard-fw_14_292_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/rs_od-hard-fw_14_293_list.jpg b/frontend/web/thumbs/products/rs_od-hard-fw_14_293_list.jpg new file mode 100755 index 0000000..032e376 Binary files /dev/null and b/frontend/web/thumbs/products/rs_od-hard-fw_14_293_list.jpg differ diff --git a/frontend/web/thumbs/products/rs_od-hard-fw_14_293_product_variant.jpg b/frontend/web/thumbs/products/rs_od-hard-fw_14_293_product_variant.jpg new file mode 100755 index 0000000..4c78b4e Binary files /dev/null and b/frontend/web/thumbs/products/rs_od-hard-fw_14_293_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-47_list.jpg b/frontend/web/thumbs/products/vaude-ss14-47_list.jpg new file mode 100755 index 0000000..1521892 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-47_list.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-47_product_variant.jpg b/frontend/web/thumbs/products/vaude-ss14-47_product_variant.jpg new file mode 100755 index 0000000..226bd8a Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-47_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-48_list.jpg b/frontend/web/thumbs/products/vaude-ss14-48_list.jpg new file mode 100755 index 0000000..47b10f7 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-48_list.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-48_product_variant.jpg b/frontend/web/thumbs/products/vaude-ss14-48_product_variant.jpg new file mode 100755 index 0000000..eef4d19 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-48_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-49_list.jpg b/frontend/web/thumbs/products/vaude-ss14-49_list.jpg new file mode 100755 index 0000000..e0239f8 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-49_list.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-49_product_variant.jpg b/frontend/web/thumbs/products/vaude-ss14-49_product_variant.jpg new file mode 100755 index 0000000..31e8371 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-49_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-50_2_product_variant.jpg b/frontend/web/thumbs/products/vaude-ss14-50_2_product_variant.jpg new file mode 100755 index 0000000..6a891c5 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-50_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-50_3_product_variant.jpg b/frontend/web/thumbs/products/vaude-ss14-50_3_product_variant.jpg new file mode 100755 index 0000000..64038f8 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-50_3_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-50_4_list.jpg b/frontend/web/thumbs/products/vaude-ss14-50_4_list.jpg new file mode 100755 index 0000000..b558c01 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-50_4_list.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-50_4_product_variant.jpg b/frontend/web/thumbs/products/vaude-ss14-50_4_product_variant.jpg new file mode 100755 index 0000000..86d4cef Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-50_4_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-50_product_variant.jpg b/frontend/web/thumbs/products/vaude-ss14-50_product_variant.jpg new file mode 100755 index 0000000..9512763 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-50_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-51_2_list.jpg b/frontend/web/thumbs/products/vaude-ss14-51_2_list.jpg new file mode 100755 index 0000000..9876796 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-51_2_list.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-51_2_product_variant.jpg b/frontend/web/thumbs/products/vaude-ss14-51_2_product_variant.jpg new file mode 100755 index 0000000..a0b7937 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-51_2_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-51_product_variant.jpg b/frontend/web/thumbs/products/vaude-ss14-51_product_variant.jpg new file mode 100755 index 0000000..559e497 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-51_product_variant.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-68_list.jpg b/frontend/web/thumbs/products/vaude-ss14-68_list.jpg new file mode 100755 index 0000000..514afcc Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-68_list.jpg differ diff --git a/frontend/web/thumbs/products/vaude-ss14-68_product_variant.jpg b/frontend/web/thumbs/products/vaude-ss14-68_product_variant.jpg new file mode 100755 index 0000000..3b21dc0 Binary files /dev/null and b/frontend/web/thumbs/products/vaude-ss14-68_product_variant.jpg differ diff --git a/frontend/web/updatemods/counter.txt b/frontend/web/updatemods/counter.txt new file mode 100755 index 0000000..c227083 --- /dev/null +++ b/frontend/web/updatemods/counter.txt @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/frontend/web/updatemods/cr.php b/frontend/web/updatemods/cr.php new file mode 100755 index 0000000..403c8d9 --- /dev/null +++ b/frontend/web/updatemods/cr.php @@ -0,0 +1,279 @@ +query("UPDATE `mod` SET `active`=1"); +/* +if(is_file(dirname( __FILE__ )."/../upload/oldfile_1.csv")){ + + $db->query('update catalogs_config set value=value+1 where id=5'); + $status = @$db->super_query('select value from catalogs_config where id=6',$db); + + if($status[0]['value'] ==1){ + exit; + } else { + $db->query('update catalogs_config set value=1 where id=6'); + sleep(300); + } + $d1 = @$db->super_query('select value from catalogs_config where id=5',$db); + $num = $d1[0]['value']; + +} else{ + exit; +} +*/ +$num = 1; +$_SERVER['DOCUMENT_ROOT'] = realpath(dirname(__FILE__)); +$tmpfname = $_SERVER['DOCUMENT_ROOT'] . "/../upload/file_1_duble.csv"; +$handle24 = fopen($tmpfname, "w"); + + +//unlink($_SERVER['DOCUMENT_ROOT'] . "/tmp/noDB_mod.csv"); + +//$link = mysql_connect(DBHOST,DBNAME,DBPASS); +//if(@$link) echo "ok"; +//else echo "not"; + + +//$fg = @fopen(dirname( __FILE__ )."/cron/oldfile_1.csv","r"); +//if(!@$fg) exit; +//@fclose($fg); +//exit; + +$rrrrrrrrrrrr = array(); + +$last_pid = ""; + +$ma = array(); + + +$su = 0; +$su2 = 0; + +$yy = @fopen(dirname ( __FILE__ )."/counter.txt","r+"); +$su = trim(fread($yy,128)); +fclose($yy); + + + + + + + +$fg = fopen(dirname( __FILE__ )."/../upload/file_1.csv","r"); +if(@$fg){ + $cot = ""; + while(!feof($fg)) + $cot = $cot.fread($fg,512); + @fclose($fg); +} +$cot = explode("\n",$cot); + +//print_r($cot); +if(trim($su)<=0 && count($cot)>2){ + $fg = @fopen(dirname ( __FILE__ )."/../upload/noDB_mod.csv","w+"); + fclose($fg); +} + +for($i=$su;$i"; + $line = explode(";",$cot[$i]); + +print_r($line); + if(trim($line[3])>0){ +//$db->query("UPDATE `catalogs_modifications` SET `active` = '1' WHERE `code` = '".trim($line[0])."';"); + } + + +///////////////////////////////////////////// ����� ������. ���� ���, �� ������� ���. + $row_city = @$db->super_query("SELECT * FROM `catalogs_cities` WHERE `name`='".trim($line[4])."' LIMIT 1;"); + if(!@$row_city['id']){ + @$db->query("INSERT INTO `catalogs_cities` (`name`) VALUES ('".trim($line[4])."');"); + $row_city['id'] = $db->insert_id(); + } + echo "�����:".$row_city['id']."
    "; + + +///////////////////////////////////////////// �������� �������� � ������� + $protect = @$db->super_query("SELECT * FROM catalogs_keys_products_cities WHERE mod_code='".trim($line[0])."' LIMIT 1;"); + $pr = @$db->super_query("SELECT * FROM `mod` WHERE `art` = '".trim($line[0])."' LIMIT 1;"); + + +///////////////////////////////////////////// �������� ���-�� � ������� + /* + if($last_pid!=trim($pr['product_id'])){ + $last_pid = trim($pr['product_id']); + if(trim($pr['product_id'])!='') + $db->query("DELETE FROM `catalogs_keys_products_cities` WHERE `product_id` = '".trim($pr['product_id'])."';"); + } + */ + + if($last_pid!=trim($line[0])){ + $last_pid = trim($line[0]); + if(trim($line[0])!='')$db->query("DELETE FROM `catalogs_keys_products_cities` WHERE `mod_code` = '".trim($line[0])."';"); + } + + + +///////////////////////////////////////////// + + + if(!@$protect['product_id'] && @$pr['product_id']){ + @$db->query("INSERT INTO `catalogs_keys_products_cities` (`product_id`,`mod_code`,`count`,`mktime`,`city_id`) VALUES ('".@$pr['product_id']."','".trim($line[0])."','".trim($line[3])."','".time()."','".$row_city['id']."');"); + } + echo "������� ID:".$pr['product_id']."
    "; +///////////////////////////////////////////// + +///////////////////////////////////////////// �������� ������ �� ������������� � ���������� � ������. + $no_DB = 0; + /* + $product = $db->super_query("SELECT f1.product_id as in_city, f2.product_id as in_modification, f2.product_id as in_modification FROM catalogs_keys_products_cities f1 LEFT JOIN catalogs_modifications f2 ON f2.code='".trim($line[0])."' WHERE f1.mod_code='".trim($line[0])."' AND f1.city_id='".$row_city['id']."' LIMIT 1;"); + */ + + $product = $db->super_query("SELECT product_id AS in_modification +FROM `mod` +WHERE `art` = '".trim($line[0])."' LIMIT 1"); +print "SELECT product_id AS in_modification +FROM `mod` +WHERE `art` = '".trim($line[0])."' LIMIT 1"; +print_r($product);print"
    "; +print "SELECT f1.product_id FROM catalogs_keys_products_cities f1 WHERE f1.product_id='".@$product['in_modification']."' and f1.mod_code='".trim($line[0])."' AND f1.city_id='".$row_city['id']."' LIMIT 1;"; + $catalogs_keys_products_cities = $db->super_query("SELECT f1.product_id FROM catalogs_keys_products_cities f1 WHERE f1.product_id='".@$product['in_modification']."' and f1.mod_code='".trim($line[0])."' AND f1.city_id='".$row_city['id']."' LIMIT 1;"); + if(!@$catalogs_keys_products_cities['product_id']){print'not city v keys
    '; + $db->query("INSERT INTO `catalogs_keys_products_cities` (`product_id`,`mod_code`,`count`,`mktime`,`city_id`) VALUES ('".@$pr['product_id']."','".trim($line[0])."','".trim($line[3])."','".time()."','".$row_city['id']."');"); + print "INSERT INTO `catalogs_keys_products_cities` (`product_id`,`mod_code`,`count`,`mktime`,`city_id`) VALUES ('".@$pr['product_id']."','".trim($line[0])."','".trim($line[3])."','".time()."','".$row_city['id']."');
    "; + } + + + + + + + + + +//$product = $db->super_query("SELECT f2.product_id as in_modification, f2.product_id as in_modification FROM catalogs_modifications f2 //WHERE f2.code='".trim($line[0])."' LIMIT 1;"); + + + echo "��� 3:".$product['in_modification']."
    "; + +//if(@$product['in_modification'] && !@$product['in_city'] && trim($line[3])>0){ +////////$db->query("INSERT INTO `catalogs_keys_products_cities` (`product_id`,`mod_code`,`count`,`mktime`,`city_id`) VALUES ///////('".@$product['in_modification']."','".trim($line[0])."','".trim($line[3])."','".time()."','".$row_city['id']."');"); +//}else + if(@$product['in_modification']){ + $db->query("UPDATE `catalogs_keys_products_cities` SET `count`='".trim($line[3])."' WHERE `product_id`='".@$product['in_modification']."' AND `mod_code`='".trim($line[0])."' AND `city_id`=".trim($row_city['id']).";"); + print "UPDATE `catalogs_keys_products_cities` SET `count`='".trim($line[3])."' WHERE `product_id`='".@$product['in_modification']."' AND `mod_code`='".trim($line[0])."' AND `city_id`=".trim($row_city['id']).";
    "; + }elseif(!@$product['in_modification']) $no_DB = 1; +///////////////////////////////////////////// +///////////////////////////////////////////// ������ � ������������� + if(@$product['in_modification'] && trim($line[0])!='') + $row2 = $db->super_query("SELECT COUNT(*) as count FROM `catalogs_keys_products_cities` WHERE `count`>0 AND `product_id`='".@$product['in_modification']."' AND `mod_code` = '".trim($line[0])."';"); + + echo "��� 4:".$row2['count']."
    "; + + if(trim($line[2])>0){$cine = trim($line[2]);$cine_last = trim($line[1]);$sale[] = 1;} + else{$cine = trim($line[1]);$cine_last = 0;$sale[] = 0;} + + + // if(trim($line[3])<=0 && trim($line[0])!='' && $row2['count']<=0){ + // $db->query("UPDATE `mod` SET `active` = '1', `cost`=".$cine.", `old_cost`=".$cine_last." WHERE `art` = '".trim($line[0])."';"); + // }else if(trim($line[3])>0) {$db->query("UPDATE `mod` SET `active` = '0',`cost`=".$cine.", `old_cost`=".$cine_last." WHERE `art` = '".trim($line[0])."';");} + + + if($row2['count']>0)$db->query("UPDATE `mod` SET `active` = '0',`cost`=".$cine.", `old_cost`=".$cine_last." WHERE `art` = '".trim($line[0])."';"); + else $db->query("UPDATE `mod` SET `active` = '1',`cost`=".$cine.", `old_cost`=".$cine_last." WHERE `art` = '".trim($line[0])."';"); + + + +print "select COUNT(*) as count from mod where product_id='".$product['in_modification']."' and old_cost>0 GROUP BY cost"; + $p = $db->super_query("select COUNT(*) as count from `mod` where `active`=0 and product_id='".$product['in_modification']."' and old_cost>0 GROUP BY cost"); + $p2 = $db->super_query("select COUNT(*) as count from `mod` where `active`=0 and product_id='".$product['in_modification']."'"); + + print "".$p['count'].''; + $sale = ($p['count']>0 && $p['count']<$p2['count']) ? 1 : 0; + $res1 = $db->query("UPDATE `products` SET `sale`='".$sale."' WHERE `id`=".trim(@$product['in_modification'])." LIMIT 1;"); +///////////////////////////////////////////// +///////////////////////////////////////////// ��������� � ���������� �������� � ������� ��� �����������. + if(@$product['in_modification']){ + $row2 = $db->super_query("SELECT COUNT(*) as count FROM `mod` WHERE `active`=0 and `product_id`=".@$product['in_modification'].";"); + if(trim($row2['count']) <= 0) + $db->query("UPDATE `products` SET `count_modifications` = 0 WHERE `id` = '".@$product['in_modification']."';"); +//else $db->query("UPDATE `catalogs_products` SET `count_modifications` = '".trim($row2['count'])."',`active` = '1' WHERE `id` = '".@$product['in_modification']."';"); + else $db->query("UPDATE `products` SET `count_modifications` = '".trim($row2['count'])."' WHERE `id` = '".@$product['in_modification']."';"); + + } +///////////////////////////////////////////// +///////////////////////////////////////////// ���������� ����. + $row_6 = $db->super_query("SELECT COUNT(*) as count FROM `mod` WHERE `active`=0 and `product_id`='".@$product['in_modification']."'"); + $row_7 = $db->super_query("SELECT COUNT(*) as count FROM `mod` WHERE `active`=0 and `product_id`='".@$product['in_modification']."' Group by cost"); + print'('.$row_7['count'].')'; + if($row_7['count']==$row_6['count']){ + + }else{ + $row_8 = $db->super_query("SELECT cost,old_cost FROM `mod` WHERE `active`=0 and old_cost>0 AND `product_id`='".@$product['in_modification']."' Order by cost desc"); + $line[1] = 0;//$row_8['cine_last']; + $line[2] = $cine; + print'['.$line[2].']'; + } + + if(trim($line[3])>0){ + if(trim($line[2])!="0.00" && @$product['in_modification'] && trim($line[1]) != "" && trim($line[2])!=''){ + $res = $db->query("UPDATE `products` SET `old_cost`=".trim($line[1]).", `cost1`=".trim($line[2])." WHERE `id`=".trim(@$product['in_modification'])." LIMIT 1;"); + + } + elseif(trim($line[1]) != "" && @$product['in_modification']) $res = $db->query("UPDATE `products` SET `old_cost`='0' ,`cost1`=".trim($line[1])." WHERE `id`=".trim(@$product['in_modification'])." LIMIT 1;"); + if(@$res) echo "������ �� ���������� ��� ��������. ���: ".@$product['in_modification']."
    "; + }else echo "�� ����������, ����������� �����: ".@$product['in_modification']."
    "; +///////////////////////////////////////////// + fwrite($handle24,$cot[$i]."\r\n"); + $product = array(); + if($no_DB == 1){ + + + + if(!@$ma[trim($line[0])]){ + $ma[trim($line[0])]="1"; + $fg2 = @fopen(dirname ( __FILE__ )."/../upload/noDB_mod.csv","a"); + fputs($fg2,implode(";",$line)); + fclose($fg2); + } + } + +//if($su2>=1000) exit; + + $yy = @fopen(dirname ( __FILE__ )."/counter.txt","w+"); + fputs($yy,$su); + fclose($yy); + $su++; + $su2++; +} + + +$yy = @fopen(dirname ( __FILE__ )."/counter.txt","w+"); +fputs($yy,"0"); +fclose($yy); + +if($su==(count($cot)-1)){ + // @unlink(dirname( __FILE__ )."/../upload/file_1.csv"); + print "delete file"; +} + + + + + +fclose($handle24); +$db->query('update catalogs_config set value=0 where id=6'); + +?> \ No newline at end of file diff --git a/frontend/web/updatemods/mysql.class.php b/frontend/web/updatemods/mysql.class.php new file mode 100755 index 0000000..1bcbc35 --- /dev/null +++ b/frontend/web/updatemods/mysql.class.php @@ -0,0 +1,219 @@ +db_id = @mysql_connect($db_location, $db_user, $db_pass)) { + if($show_error == 1) { + $this->display_error(mysql_error(), mysql_errno()); + } else { + return false; + } + } + + if(!@mysql_select_db($db_name, $this->db_id)) { + if($show_error == 1) { + $this->display_error(mysql_error(), mysql_errno()); + } else { + return false; + } + } + + $this->mysql_version = mysql_get_server_info(); + + if(!defined('COLLATE')) + { + define ("COLLATE", "cp1251"); + } + + if (version_compare($this->mysql_version, '4.1', ">=")) mysql_query("/*!40101 SET NAMES '" . COLLATE . "' */"); + + $this->connected = true; + + return true; + } + + function query($query, $show_error=false) + { + $time_before = $this->get_real_time(); + + if(!$this->connected) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST); + + if(!($this->query_id = mysql_query($query, $this->db_id) )) { + + $this->mysql_error = mysql_error(); + $this->mysql_error_num = mysql_errno(); + + if($show_error) { + $this->display_error($this->mysql_error, $this->mysql_error_num, $query); + } + } + + $this->MySQL_time_taken += $this->get_real_time() - $time_before; + + +// $this->query_list[] = array( 'time' => ($this->get_real_time() - $time_before), +// 'query' => $query, +// 'num' => (count($this->query_list) + 1)); + + $this->query_num ++; + + return $this->query_id; + } + + function get_row($query_id = '') + { + if ($query_id == '') $query_id = $this->query_id; + + return mysql_fetch_assoc($query_id); + } + + function get_array($query_id = '') + { + if ($query_id == '') $query_id = $this->query_id; + + return mysql_fetch_array($query_id); + } + + + function super_query($query, $multi = false) + { + + if(!$multi) { + + $this->query($query); + $data = $this->get_row(); + $this->free(); + return $data; + + } else { + $this->query($query); + + $rows = array(); + while($row = $this->get_row()) { + $rows[] = $row; + } + + $this->free(); + + return $rows; + } + } + + function num_rows($query_id = '') + { + + if ($query_id == '') $query_id = $this->query_id; + + return mysql_num_rows($query_id); + } + + function insert_id() + { + return mysql_insert_id($this->db_id); + } + + function get_result_fields($query_id = '') { + + if ($query_id == '') $query_id = $this->query_id; + + while ($field = mysql_fetch_field($query_id)) + { + $fields[] = $field; + } + + return $fields; + } + + function safesql( $source ) + { + if ($this->db_id) return mysql_real_escape_string ($source, $this->db_id); + else return mysql_escape_string($source); + } + + function free( $query_id = '' ) + { + + if ($query_id == '') $query_id = $this->query_id; + + @mysql_free_result($query_id); + } + + function close() + { + @mysql_close($this->db_id); + } + + function get_real_time() + { + list($seconds, $microSeconds) = explode(' ', microtime()); + return ((float)$seconds + (float)$microSeconds); + } + + function display_error($error, $error_num, $query = '') + { + if($query) { + // Safify query + $query = preg_replace("/([0-9a-f]){32}/", "********************************", $query); // Hides all hashes + $query_str = "$query"; + } + + echo ' + + + + MySQL Fatal Error + + + + + MySQL Error! +
    ------------------------
    +
    + + The Error returned was: +
    + '.$error.' + +

    + Error Number: +
    + '.$error_num.' +
    +
    + +
    + + + '; + + exit(); + } + +} + + +?> \ No newline at end of file diff --git a/frontend/widgets/BannerWidget.php b/frontend/widgets/BannerWidget.php new file mode 100755 index 0000000..dbbbc7f --- /dev/null +++ b/frontend/widgets/BannerWidget.php @@ -0,0 +1,76 @@ +where([Banner::tableName().'.title'=>$this->title, Banner::tableName().'.status' => '1'] )->one(); + if (! empty ($banner)) + { + // html + return $this->htmlBanner($banner); + } + } + + + // ==== DISPLAY ==== + + public function htmlBanner ($banner) + { + ob_start(); + + echo ''; + + return ob_get_clean(); + } +} \ No newline at end of file diff --git a/frontend/widgets/FilterList.php b/frontend/widgets/FilterList.php new file mode 100644 index 0000000..117dae4 --- /dev/null +++ b/frontend/widgets/FilterList.php @@ -0,0 +1,335 @@ + [ + * // Important: you need to specify url as 'controller/action', + * // not just as 'controller' even if default action is used. + * ['label' => 'Home', 'url' => ['site/index']], + * // 'Products' menu item will be selected as long as the route is 'product/index' + * ['label' => 'Products', 'url' => ['product/index'], 'items' => [ + * ['label' => 'New Arrivals', 'url' => ['product/index', 'tag' => 'new']], + * ['label' => 'Most Popular', 'url' => ['product/index', 'tag' => 'popular']], + * ]], + * ['label' => 'Login', 'url' => ['site/login'], 'visible' => Yii::$app->user->isGuest], + * ], + * ]); + * ``` + * + * @author Qiang Xue + * @since 2.0 + */ +class FilterList extends Widget +{ + /** + * @var array list of menu items. Each menu item should be an array of the following structure: + * + * - label: string, optional, specifies the menu item label. When [[encodeLabels]] is true, the label + * will be HTML-encoded. If the label is not specified, an empty string will be used. + * - encode: boolean, optional, whether this item`s label should be HTML-encoded. This param will override + * global [[encodeLabels]] param. + * - url: string or array, optional, specifies the URL of the menu item. It will be processed by [[Url::to]]. + * When this is set, the actual menu item content will be generated using [[linkTemplate]]; + * otherwise, [[labelTemplate]] will be used. + * - visible: boolean, optional, whether this menu item is visible. Defaults to true. + * - items: array, optional, specifies the sub-menu items. Its format is the same as the parent items. + * - active: boolean, optional, whether this menu item is in active state (currently selected). + * If a menu item is active, its CSS class will be appended with [[activeCssClass]]. + * If this option is not set, the menu item will be set active automatically when the current request + * is triggered by `url`. For more details, please refer to [[isItemActive()]]. + * - template: string, optional, the template used to render the content of this menu item. + * The token `{url}` will be replaced by the URL associated with this menu item, + * and the token `{label}` will be replaced by the label of the menu item. + * If this option is not set, [[linkTemplate]] or [[labelTemplate]] will be used instead. + * - submenuTemplate: string, optional, the template used to render the list of sub-menus. + * The token `{items}` will be replaced with the rendered sub-menu items. + * If this option is not set, [[submenuTemplate]] will be used instead. + * - options: array, optional, the HTML attributes for the menu container tag. + */ + public $items = []; + /** + * @var array list of HTML attributes shared by all menu [[items]]. If any individual menu item + * specifies its `options`, it will be merged with this property before being used to generate the HTML + * attributes for the menu item tag. The following special options are recognized: + * + * - tag: string, defaults to "li", the tag name of the item container tags. + * Set to false to disable container tag. + * See also [[\yii\helpers\Html::tag()]]. + * + * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. + */ + public $itemOptions = []; + /** + * @var string the template used to render the body of a menu which is a link. + * In this template, the token `{url}` will be replaced with the corresponding link URL; + * while `{label}` will be replaced with the link text. + * This property will be overridden by the `template` option set in individual menu items via [[items]]. + */ + public $linkTemplate = '{label}'; + /** + * @var string the template used to render the body of a menu which is NOT a link. + * In this template, the token `{label}` will be replaced with the label of the menu item. + * This property will be overridden by the `template` option set in individual menu items via [[items]]. + */ + public $labelTemplate = '{label}'; + /** + * @var string the template used to render a list of sub-menus. + * In this template, the token `{items}` will be replaced with the rendered sub-menu items. + */ + public $submenuTemplate = "\n
      \n{items}\n
    \n"; + /** + * @var boolean whether the labels for menu items should be HTML-encoded. + */ + public $encodeLabels = true; + /** + * @var string the CSS class to be appended to the active menu item. + */ + public $activeCssClass = 'active'; + /** + * @var boolean whether to automatically activate items according to whether their route setting + * matches the currently requested route. + * @see isItemActive() + */ + public $activateItems = true; + /** + * @var boolean whether to activate parent menu items when one of the corresponding child menu items is active. + * The activated parent menu items will also have its CSS classes appended with [[activeCssClass]]. + */ + public $activateParents = false; + /** + * @var boolean whether to hide empty menu items. An empty menu item is one whose `url` option is not + * set and which has no visible child menu items. + */ + public $hideEmptyItems = true; + /** + * @var array the HTML attributes for the menu's container tag. The following special options are recognized: + * + * - tag: string, defaults to "ul", the tag name of the item container tags. Set to false to disable container tag. + * See also [[\yii\helpers\Html::tag()]]. + * + * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered. + */ + public $options = []; + /** + * @var string the CSS class that will be assigned to the first item in the main menu or each submenu. + * Defaults to null, meaning no such CSS class will be assigned. + */ + public $firstItemCssClass; + /** + * @var string the CSS class that will be assigned to the last item in the main menu or each submenu. + * Defaults to null, meaning no such CSS class will be assigned. + */ + public $lastItemCssClass; + /** + * @var string the route used to determine if a menu item is active or not. + * If not set, it will use the route of the current request. + * @see params + * @see isItemActive() + */ + public $route; + /** + * @var array the parameters used to determine if a menu item is active or not. + * If not set, it will use `$_GET`. + * @see route + * @see isItemActive() + */ + public $params; + + + /** + * Renders the menu. + */ + public function run() + { + if ($this->route === null && Yii::$app->controller !== null) { + $this->route = Yii::$app->controller->getRoute(); + } + if ($this->params === null) { + $this->params = Yii::$app->request->getQueryParams(); + } + $items = $this->normalizeItems($this->items, $hasActiveChild); + if (!empty($items)) { + $options = $this->options; + $tag = ArrayHelper::remove($options, 'tag', 'ul'); + + echo Html::tag($tag, $this->renderItems($items), $options); + } + } + + /** + * Recursively renders the menu items (without the container tag). + * @param array $items the menu items to be rendered recursively + * @return string the rendering result + */ + protected function renderItems($items) + { + $n = count($items); + $lines = []; + foreach ($items as $i => $item) { + + $options = array_merge($this->itemOptions, ArrayHelper::getValue($item, 'option +s', [])); + $tag = ArrayHelper::remove($options, 'tag + print_r($tag);', 'li'); + $class = []; + if ($item['active']) { + $class[] = $this->activeCssClass; + } + if ($i === 0 && $this->firstItemCssClass !== null) { + $class[] = $this->firstItemCssClass; + } + if ($i === $n - 1 && $this->lastItemCssClass !== null) { + $class[] = $this->lastItemCssClass; + } + if (!empty($class)) { + if (empty($options['class'])) { + $options['class'] = implode(' ', $class); + } else { + $options['class'] .= ' ' . implode(' ', $class); + } + } + + $menu = $this->renderItem($item); + if (!empty($item['items'])) { + $submenuTemplate = ArrayHelper::getValue($item, 'submenuTemplate', $this->submenuTemplate); + $menu .= strtr($submenuTemplate, [ + '{items}' => $this->renderItems($item['items']), + ]); + } + $lines[] = Html::tag($tag, $menu, $options); + } + + return implode("\n", $lines); + } + + /** + * Renders the content of a menu item. + * Note that the container and the sub-menus are not rendered here. + * @param array $item the menu item to be rendered. Please refer to [[items]] to see what data might be in the item. + * @return string the rendering result + */ + protected function renderItem($item) + { + if (isset($item['url'])) { + $template = ArrayHelper::getValue($item, 'template', $this->linkTemplate); + + return strtr($template, [ + '{url}' => Html::encode(Url::to($item['url'])), + '{label}' => $item['label'], + ]); + } else { + $template = ArrayHelper::getValue($item, 'template', $this->labelTemplate); + + return strtr($template, [ + '{label}' => $item['label'], + ]); + } + } + + /** + * Normalizes the [[items]] property to remove invisible items and activate certain items. + * @param array $items the items to be normalized. + * @param boolean $active whether there is an active child menu item. + * @return array the normalized menu items + */ + protected function normalizeItems($items, &$active) + { + foreach ($items as $i => $item) { + if (isset($item['visible']) && !$item['visible']) { + unset($items[$i]); + continue; + } + if (!isset($item['label'])) { + $item['label'] = ''; + } + $encodeLabel = isset($item['encode']) ? $item['encode'] : $this->encodeLabels; + $items[$i]['label'] = $encodeLabel ? Html::encode($item['label']) : $item['label']; + $hasActiveChild = false; + if (isset($item['items'])) { + $items[$i]['items'] = $this->normalizeItems($item['items'], $hasActiveChild); + if (empty($items[$i]['items']) && $this->hideEmptyItems) { + unset($items[$i]['items']); + if (!isset($item['url'])) { + unset($items[$i]); + continue; + } + } + } + if (!isset($item['active'])) { + if ($this->activateParents && $hasActiveChild || $this->activateItems && $this->isItemActive($item)) { + $active = $items[$i]['active'] = true; + } else { + $items[$i]['active'] = false; + } + } elseif ($item['active']) { + $active = true; + } + } + + return array_values($items); + } + + /** + * Checks whether a menu item is active. + * This is done by checking if [[route]] and [[params]] match that specified in the `url` option of the menu item. + * When the `url` option of a menu item is specified in terms of an array, its first element is treated + * as the route for the item and the rest of the elements are the associated parameters. + * Only when its route and parameters match [[route]] and [[params]], respectively, will a menu item + * be considered active. + * @param array $item the menu item to be checked + * @return boolean whether the menu item is active + */ + protected function isItemActive($item) + { + if (isset($item['url']) && is_array($item['url']) && isset($item['url'][0])) { + $route = Yii::getAlias($item['url'][0]); + if ($route[0] !== '/' && Yii::$app->controller) { + $route = Yii::$app->controller->module->getUniqueId() . '/' . $route; + } + if (ltrim($route, '/') !== $this->route) { + return false; + } + unset($item['url']['#']); + if (count($item['url']) > 1) { + $params = $item['url']; + unset($params[0]); + foreach ($params as $name => $value) { + if ($value !== null && (!isset($this->params[$name]) || $this->params[$name] != $value)) { + return false; + } + } + } + + return true; + } + + return false; + } +} diff --git a/frontend/widgets/FilterWidget.php b/frontend/widgets/FilterWidget.php new file mode 100755 index 0000000..859d9b8 --- /dev/null +++ b/frontend/widgets/FilterWidget.php @@ -0,0 +1,36 @@ +render('_filter_view',[ + 'category'=>$this->category, + 'groups'=>$this->groups, + 'filter'=>$this->filter, + 'priceLimits'=>$this->priceLimits, + ]); + + } + +} +?> diff --git a/frontend/widgets/Rubrics.php b/frontend/widgets/Rubrics.php new file mode 100755 index 0000000..acbc086 --- /dev/null +++ b/frontend/widgets/Rubrics.php @@ -0,0 +1,50 @@ +active)) { + $this->active = Yii::$app->request->get('category'); + } + if (!empty($this->active) && !is_object($this->active)) { + $this->active = CategorySearch::findByAlias($this->active); + } + if (!empty($this->active)) { + $this->active = $this->active->category_id; + } + $items = []; + + if (empty($this->categories)) { + $this->categories = Category::find()->orderBy('category_id', SORT_ASC)->all(); + } + foreach ($this->categories as $category) { + if (!empty($this->includes) && !in_array($category->category_id, $this->includes)) { + continue; + } + $items[] = $category;[ + 'label' => $category->name, + 'url' => Url::to(['catalog/category', 'category' => $category]), + 'active' => !empty($categoryObject) && $categoryObject->alias == $category->alias ? true : false, + ]; + } + + return $this->render('rubrics', ['items' => $items, 'wrapper' => $this->wrapper, 'active' => $this->active]); + } +} \ No newline at end of file diff --git a/frontend/widgets/Seo.php b/frontend/widgets/Seo.php new file mode 100755 index 0000000..71557ef --- /dev/null +++ b/frontend/widgets/Seo.php @@ -0,0 +1,451 @@ +url = \Yii::$app->request->url; + $this->project_name = \Yii::$app->name; + if(empty(self::$optionsList)){ + self::$optionsList = ArrayHelper::getColumn(TaxGroup::find()->where(['is_filter' => 'TRUE'])->all(),'alias'); + } + + parent::init(); + + } + + + public function run() + { + + $seoData = $this->getViewData(); + foreach ($seoData as $key => $value) { + $this->$key = $value; + } + + + switch ($this->row) { + case self::SEO_TEXT: + + + $filter = \Yii::$app->request->get('filters', []); + $sort = \Yii::$app->request->get('sort', []); + $paginate = \Yii::$app->request->get('page', []); + + if(empty($filter) && empty($sort) && empty($paginate) ){ + + return $this->selectSeoData(self::SEO_TEXT); + + } else { + + $widgetData = static::findSeoByUrl($this->url); + + $result = ''; + + if ($widgetData instanceof \common\models\Seo) { + + $result = $widgetData->{self::SEO_TEXT}; + + } else { + + $widgetData = $this->findSeoByDynamic(); + + if ($widgetData instanceof SeoDynamic) { + + $result = $widgetData->{self::SEO_TEXT}; + + } + + } + + return $this->replaceData($result); + } + + + break; + case self::H1: + + $filter = \Yii::$app->request->get('filters', []); + + $default = $this->selectSeoData(self::H1); + + if ($default != $this->{self::H1}) { + + return $default; + + + } else if(!empty($filter) && !$this->checkFilter($filter)){ + + $array = $this->arrayBuilder($filter); + return $this->getNameString($array); + } + else { + + return $default; + } + break; + case self::TITLE: + + $filter = \Yii::$app->request->get('filters', []); + + + $title = $this->selectSeoData(self::TITLE); + + + if(!empty($filter) && $title == $this->title || !empty($filter) && empty($title)) { + + $array = $this->arrayBuilder($filter); + + $title_string = $this->getTitleString($array); + + if($title_string){ + return $title_string; + } + + } + + if (!empty($title)) { + + return $title; + } else { + return $this->project_name; + } + + break; + case self::DESCRIPTION: + $description = $this->selectSeoData(self::DESCRIPTION); + + if (!empty($description)) { + + $this->getView()->registerMetaTag([ + 'name' => 'description', + 'content' => $description + ]); + + } else { + + $filter = \Yii::$app->request->get('filters', []); + + if(!empty($filter)){ + $array = $this->arrayBuilder($filter); + $this->getView()->registerMetaTag([ + 'name' => 'description', + 'content' => $this->getDescriptionString($array) + ]); + } + + } + + break; + case self::META: + + $meta = $this->selectSeoData(self::META); + + $filter = \Yii::$app->request->get('filters', []); + $sort = \Yii::$app->request->get('sort', []); + $paginate = \Yii::$app->request->get('page', []); + + + if (!empty($meta) && empty($sort) && empty($paginate) && !isset($filter['prices']) ) { + + $this->getView()->registerMetaTag([ + 'name' => 'robots', + 'content' => $meta + ]); + + } else if(!empty($filter['special'])){ + + $this->getView()->registerMetaTag([ + 'name' => 'robots', + 'content' => 'noindex,follow' + ]); + + } else if ( + isset($filter['brands']) && count($filter['brands']) > 1 + || isset($filter) && $this->checkFilter($filter) + + ) { + + $this->getView()->registerMetaTag([ + 'name' => 'robots', + 'content' => 'noindex,nofollow' + ]); + + } else if ( + isset($filter['brands']) && count($filter['brands']) > 1 && isset($filter) && count($filter, COUNT_RECURSIVE) >= 4 + || isset($filter) && count($filter, COUNT_RECURSIVE) > 4 + || !empty($sort) || !empty($paginate) || isset($filter['prices']) + ) { + + $this->getView()->registerMetaTag([ + 'name' => 'robots', + 'content' => 'noindex,nofollow' + ]); + } else { + + $this->getView()->registerMetaTag([ + 'name' => 'robots', + 'content' => 'index,follow' + ]); + } + + + + + break; + } + + + } + + protected function replaceData($str) + { + + if (!empty($this->fields)) { + foreach ($this->fields as $field_name => $field_value) { + $str = str_replace('{' . $field_name . '}', $field_value, $str); + } + } + $str = str_replace('{project_name}', $this->project_name, $str); + return $str; + } + + protected static function findSeoByUrl($url) + { + if(empty(self::$check_url_bool)){ + self::$check_url = \common\models\Seo::findOne(['url' => $url]); + self::$check_url_bool = true; + } + return self::$check_url; + } + + protected function findSeoByDynamic() + { + + if(!empty($this->key)){ + + $query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller' => \Yii::$app->controller->id, 'action' => \Yii::$app->controller->action->id, 'key' => $this->key]); + } else { + + + $query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller' => \Yii::$app->controller->id, 'action' => \Yii::$app->controller->action->id]); + } + + return $query->one(); + } + + + protected function findSeoByDynamicForFilters(){ + return SeoDynamic::find()->joinWith('seoCategory')->where(['param' =>'filters'])->one(); + } + + + protected function getViewData() + { + $params = $this->getView()->params; + if (isset($params['seo'])) { + return $params['seo']; + } else { + return []; + } + } + + protected function selectSeoData($param) + { + + $result = ''; + + $widgetData = static::findSeoByUrl($this->url); + + if ($widgetData instanceof \common\models\Seo) { + + $result = $widgetData->$param; + + } else if (!empty($this->$param)) { + + $result = $this->$param; + + } else { + + $widgetData = $this->findSeoByDynamic(); + + if ($widgetData instanceof SeoDynamic) { + + $result = $widgetData->$param; + + } + + } + + return $this->replaceData($result); + + } + + public function getTitleString($array){ + // "{Название раздела: Название блока фильтра | Фильтр 1 | Название блока фильтра: Фильтр 2 | Название блока фильтра: Фильтр 3} - купить в Киеве, Украине - интернет магазин Лінія Світла"; + $row = ''; + foreach($array as $name => $field){ + + if($name == 'category' ){ + $row = $field.' | '.$row; + } else { + $row .= $field['name'] .' '.$field['value'].' | ' ; + } + + + + } + $row = substr($row, 0,-2 ); + $row .= " - купить в Киеве, Украине - интернет магазин Лінія Світла"; + return $row; +// $template = SeoDynamic::find()->select('title')->where(['param' =>'filters'])->one(); +// if($template instanceof SeoDynamic){ +// foreach ($array as $field_name => $field_value) { +// $template->title = str_replace('{' . $field_name . '}', mb_strtolower($field_value), $template->title); +// } +// $template = preg_replace('/\{.[^\}]*\}\s/','',$template->title); +// return $template; +// } +// +// return false; + + } + + + public function getDescriptionString($array){ + // "Лучшие цены на {Название раздела | Название блока фильтра: Фильтр 1 | Название блока фильтра: Фильтр 2 | Название блока фильтра: Фильтр 3}. Лінія Світла"; + $row = 'Лучшие цены на '; + foreach($array as $name => $field){ + + if($name == 'category' ){ + $row = $field.' | '.$row; + } else { + $row .= $field['name'] .' '.$field['value'].' | ' ; + } + + + + } + $row = substr($row, 0,-2 ); + $row .= ". Лінія Світла"; + return $row; + + } + + + public function getNameString($array){ + // "Лучшие цены на {Название раздела | Название блока фильтра: Фильтр 1 | Название блока фильтра: Фильтр 2 | Название блока фильтра: Фильтр 3}. Лінія Світла"; + $row = ''; + foreach($array as $name => $field){ + + if($name == 'category' ){ + $row = $field.' | '.$row; + } else { + $row .= $field['name'] .' '.$field['value'].' | ' ; + } + + + + } + $row = substr($row, 0,-2 ); + return $row; + + } + + public function arrayBuilder($filter) + { + + $array = [ + 'category' => $this->category_name + ]; + + + if (isset($filter['brands']) && count($filter['brands']) == 1) { + $model = Brand::find()->where(['alias' => $filter['brands'][0]])->one(); + if (!$model instanceof Brand) { + + \Yii::$app->response->redirect(['/site/error'], 404); + } else { + $array['brand']['name'] = 'Бренд'; + $array['brand']['value'] = $model->name; + } + + } + + + $optionsList = ArrayHelper::map(TaxGroup::find()->where(['is_filter' => 'TRUE'])->all(), 'alias', 'name'); + + + foreach ($optionsList as $optionList => $name) { + + + if (isset($filter[$optionList]) && count($filter[$optionList]) == 1) { + + $model = TaxOption::find()->where(['alias' => $filter[$optionList]])->one(); + if (!$model instanceof TaxOption) { + + \Yii::$app->response->redirect(['site/error'], 404); + } else { + $array[$optionList]['value'] = $model->value; + $array[$optionList]['name'] = $name; + } + + + } + + + } + + return $array; + + } + + protected function checkFilter($filter){ + foreach(self::$optionsList as $optionList){ + + if(isset($filter[$optionList]) && count($filter[$optionList]) > 1){ + return true; + } + + } + return false; + } + + +} \ No newline at end of file diff --git a/frontend/widgets/Slider.php b/frontend/widgets/Slider.php new file mode 100755 index 0000000..91d1fbd --- /dev/null +++ b/frontend/widgets/Slider.php @@ -0,0 +1,33 @@ +where([\common\models\Slider::tableName().'.title'=>$this->title])->joinWith("sliderImage")->one(); + if($slider instanceof \common\models\Slider){ + return $this->render('slider',[ + 'slider'=>$slider, + 'title'=>$this->title + ]); + + } + + + } + +} \ No newline at end of file diff --git a/frontend/widgets/SliderWidget.php b/frontend/widgets/SliderWidget.php new file mode 100755 index 0000000..683a7ed --- /dev/null +++ b/frontend/widgets/SliderWidget.php @@ -0,0 +1,143 @@ +where([\common\models\Slider::tableName().'.title'=>$this->title])->joinWith("sliderImage")->one(); + + if (! empty ($slider)) + { + // изображения + $images = $slider->sliderImage; + if (! empty ($images)) + { + // подключаем jssor-slider + $this->initSliderJs(); + + // скрипт-обработчик + $this->initSliderScript($slider); + + // html + return $this->htmlSlider($slider, $images); + } + } + return $this->render('slider',[ + 'slider'=>$slider + ]); + + + } + + + // ==== DISPLAY ==== + + public function initSliderJs () + { + if (! $this->is_init_slider) + { + // TODO:: wiget подключение jcarousel + $this->view->registerJsFile(\Yii::$app->request->baseUrl . '/js/widget-carousel/lib/jquery.jcarousel.min.js',[ + 'position' => View::POS_END, + 'depends' => ['yii\web\JqueryAsset'] + ]); + $this->is_init_slider = true; + } + } + + public function initSliderScript ($slider) + { + $this->view->registerJs(' + var '.$slider->title.'_option_1 = { + $AutoPlayInterval: '.$slider->duration.', + $SlideDuration: '.$slider->speed.', + }; + ', 1); + + $this->view->registerCssFile (\Yii::$app->request->BaseUrl . '/js/widget-carousel/'.$slider->title.'/style.css'); + + $this->view->registerJsFile(\Yii::$app->request->BaseUrl . '/js/widget-carousel/'.$slider->title.'/style.js',[ + 'position' => View::POS_END, + 'depends' => ['yii\web\JqueryAsset'] + ]); + } + + public function htmlSlider ($slider, $images) + { + ob_start(); + + if (! empty ($images)) + { + echo '
    '; + + echo ' + +
    +
    +
    +
    + + +
    '; + + foreach ($images as $row) + { + echo ''; + } + + echo '
    '; + + echo ' +
    +
    +
    +
    + + + '; + + echo '
    '; + } + + return ob_get_clean(); + } + +} \ No newline at end of file diff --git a/frontend/widgets/views/_filter_view.php b/frontend/widgets/views/_filter_view.php new file mode 100755 index 0000000..0d89086 --- /dev/null +++ b/frontend/widgets/views/_filter_view.php @@ -0,0 +1,94 @@ + + +
    + +
    + +
    + + +
    + +

    + +
    +
    + +
    + + +
    + $group) :?> +
    + +
    + + + + +
    + + + '{from}', + 'max' => '{to}', + ]; + + ?> +
    +
    Цена
    +
    +
    + +
    +
    +
    + +
    + + +
    + +
    + +
    + +
    + +
    + + + diff --git a/frontend/widgets/views/rubrics.php b/frontend/widgets/views/rubrics.php new file mode 100755 index 0000000..8f2a8be --- /dev/null +++ b/frontend/widgets/views/rubrics.php @@ -0,0 +1,15 @@ + + +
    + +
      + $category) :?> +
    • name, ['catalog/category', 'category' => $category])?>
    • + +
    + +
    +
    + \ No newline at end of file diff --git a/frontend/widgets/views/slider.php b/frontend/widgets/views/slider.php new file mode 100755 index 0000000..17218ce --- /dev/null +++ b/frontend/widgets/views/slider.php @@ -0,0 +1,78 @@ + + + + +duration ? $slider->duration : 5000; +$speed = $slider->speed ? $slider->speed : 500; +$js=" $(\"#$title\").owlCarousel({ + navigation : true, // Show next and prev buttons + slideSpeed : 500, + autoplayTimeout:$dur, + paginationSpeed : $speed, + singleItem:true, + autoPlay:true + + }); + var owl = $(\"#$title\"); + $('.small_ar#next_slide, .big_ar#next_slide').click(function() { + owl.trigger('owl.next'); + }) + $('.small_ar#prev_slide, .big_ar#prev_slide').click(function() { + owl.trigger('owl.prev'); + }) + "; + +$this->registerJs($js,View::POS_READY); + +?> diff --git a/generator/.htaccess b/generator/.htaccess new file mode 100755 index 0000000..0a379a4 --- /dev/null +++ b/generator/.htaccess @@ -0,0 +1,6 @@ +RewriteEngine on +RewriteBase / +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d + +RewriteRule . index.php diff --git a/generator/changelog.txt b/generator/changelog.txt new file mode 100755 index 0000000..c2efbc1 --- /dev/null +++ b/generator/changelog.txt @@ -0,0 +1,281 @@ + +ChangeLog for PHP XML Sitemap generator + +http://www.xml-sitemaps.com +---------------------------------------------- + +2015-05-19 v7.1 + + * new feature: parsing and following common javascript links + * update: using new Youtube API v3 + * new feature: Youtube playlists support + + +2014-12-14 v7.0 + + * new feature: referring pages list tracking + * new feature: alternative language URLs (hreflang) included in sitemap + * new feature: "noindex, follow" crawler configuration option + * new feature: automatically slow down/delay crawling in case of server overloading + * update: auto-detect last-modified, changefreq, revisit-after meta tags + * update: custom Accept-Language http header + * update: option to disable regular XML sitemap + * update: caching for video API requests + * update: HTML sitemap is now mobile-friendly + + +2013-11-19 v6.1 + + * new feature: include subdomains in sitemap + * new feature: additional "Starting URLs" setting + * new feature: monitor crawler window and automaticall resume if it stops + * update: mobile pages inclusion mask + * update: create both compressed and uncompressed sitemap at the same time + * update: external links tracking exclusion option + * update: optionally disable robots.txt support + + +2012-05-23 v6.0 + + * new feature: RSS feed add-on module implemented + * new feature: ajax crawlable content is supported + * update: memory usage optimized + * update: including images from external domains is now supported (optionally) + * update: new video sources supported: Blip.tv, Coull + * update: split mobile sitemap on multiple files + * update: notification email content moved to a template so that you can customize it + * update: search engines ping is sent only if sitemap has been changed + + +2011-01-25 v5.0 + + * new feature: Video Sitemap support - a separate sitemap with details on embedded videos for your site + * new feature: News Sitemaps are now supported - new URLs found by generator and included in this sitemap + * new feature: new pages on your site get higher priority attribute in sitemap + * update: Images sitemaps improved - stored in separate file, with own inclusion mask, displayed in browser + * update: generator now splits xml sitemap not only based on the number of URLs but by a file size too + + +2010-05-20 v4.0 + + * new feature: include images information in sitemap + * new feature: automatically resuming of generator when crawling stops + * new feature: XSLT stylesheet is applied to all xml sitemaps + * new feature: embedded check for new versions of sitemap generator + * update: new sorting and restructuring options for HTML sitemap formatting + * update: canonical URLs meta tags are supported + * update: multiple source pages can be tracked for broken links list + * update: option to extract last-modification date/time for "Not parsed" links + + +2009-05-19 v3.0 + + * new sitemap type: Mobile Sitemaps are now supported + * new feature: noise content exclusion presets supported (X-Cart, osCommerce, vBulletin and others) + * new feature: track the list of all links pointing to external sites + * new feature: weblogupdate: notification can be optionally sent to services like Technorati + * new feature: configuration files converted to xml and data folder protected for better security + * new feature: automatically remove old log records + * new option added: "Parse Only URLs" + * update: HTTPS sites are supported now (openSSL support is required) + * update: gzip content-encoding via http supported + * update: multiple entries allowed in "Include Only Option" + * fix: sitemap links in email notifications + + +2008-06-15 v2.9 + + * automatic email notifications sent every time sitemap is generated + * html sitemap customization: date format selection (xs_dateformat), order folders by name (xs_htmlnameorder) + * http/1.1 protocol supported + * memory usage optimized, new option to define memory limit + * option to allow pages with http response code different from 200 to be included in sitemap (xs_allow_httpcode) + * minor bug fixes + + + +2007-12-27 v2.8 + + * Live.com ping + * meta description tag can be (optionally) extracted and inserted in ROR sitemap (advanced settings section) + * Clear session (or others) parameters from URLs (advanced settings section) + * IP address connection can be defined (advanced settings section) + * Progress storage type: "serialize" or "var_export" + * Changelog order can be changed in config file (xs_chlogorder option) + + +2007-10-21 v2.7 + + * xml sitemap is now template based, which allows to integrate xsl stylesheet into your sitemap. Templates are defined in: sitemap_index_tpl.xml, sitemap_xml_tpl.xml and sitemap_ror_tpl.xml files + * priority attribute can be assigned automatically by sitemap generator script now, just enable corresponding checkbox in configuration. Priority is descending with depth level: the highest priority is assigned to your homepage and the lower values are set for other pages, depending on how many "clicks" it takes to reach the page + * minor bug fixes and improvements + + +2007-07-30 v2.6 + + * sitemap ping for Ask.com and Moreover.com (Live Search) + * memory usage optimized + + +2007-05-19 v2.5.3 + + * titles are included in ROR sitemap now + * minor bug fixes and improvements + + +2007-01-18 v2.5.2 + + * minor bug fixes and improvements + + +2006-11-25 v2.5.1 + + * sitemap protocol v0.9 is supported now + + +2006-11-24 v2.5 + + * google sitemap ping URL has been updated + * an option to automatically remove certain parameters from URLs has been implemented + * user-agent can be customized now with xs_crawl_ident option in config file + * robots.txt compliance can be turned on/off now with xs_robotstxt option in config file + * regular expressions are allowed in "Individual parameters" option - just add a leading '$' sign in the line to enable it + + +2006-10-11 v2.4 + + * yahoo auto notification option added + * html sitemap is now fully customizable + * minor bug fixes and improvements + + +2006-08-18 v2.3 + + * ROR sitemaps are now supported + * you can specify custom port for http connections now using xs_portconnection option in config.inc.php file + * an option added to limit crawl depth level + + +2006-07-04 v2.2 + + * the tag is supported now + * xml sitemap size (max number of URLs per file) can be specified in config file + * location of text sitemap can be specified in config file + * non-standard ports are supported like example.com:8080 + * minor bug fixes and improvements + +2006-03-28 v2.1.1 + + * minor bug fixes and improvements + +2006-02-21 v2.1 + + * html sitemap listing enhancements + * minor bug fixes + +2006-01-17 v2.0 + + * HTML Site map generation is now included into the script. You are able to define the number of links per page in html sitemap and customize the page layout using simple template file. + * Configuration screen interface improved + * Mutiple minor changes + + +2005-11-14 v1.2 + + * new feature: "Individual attributes" setting at Configuration screen. It allows you to set + specific values for last modification time, frequency andpriority per page. + To use it, define specific frequency and priority attributes in the following format: + "url substring,lastupdate YYYY-mm-dd,frequency,priority". + * new feature: "Include ONLY URLs" setting. This setting is the opposite to "Exclude URLs". When + it is not empty, ONLY the urls that match the substring entered are included into sitemap. + * configuration page interface improved (parameters are included into two groups now: main parameters and optional settings) + + +2005-10-27 v1.1.3 + + * the generator creates a sitemap in TEXT FORMAT for you (one URL per line). You can download it from the "Sitemap details" block at the left column of the page. This URLs list can be submitted to Yahoo! at http://submit.search.yahoo.com/free/request + + +2005-09-14 v1.1.2 + + * (fix) asp sites crawling problem + + +2005-08-30 v1.1.1 + + * "sleep" delays are now available to configure to reduce the load on your server + * new configuration directive: "Do not parse URLs" allows to skip fetching some pages to boost + the speed of sitemap generation of the large sites + * single quoted tag + + +2005-08-08 v1.1.0 + + * "resume the interrupted session" feature added + * urls extraction has been improved (some uncatched urls are now processed) + * performance/memory usage optimization + + +2005-07-31 v1.08 + + * generator pages access can be restricted + * minor improvements + + +2005-07-20 v1.07 + + * CRLF problem with sitemaps (that may lead to a parse problem in rare cases) fixed + * script configuration auto-filled with initial values + * robots.txt is now processed both from top level and from the starting URL directory + + +2005-07-14 v1.06 + + * support of (') character in URLs + + +2005-07-14 v1.05 + + * "Content-type" header is checked and only "text/html" entries are processed + * "extensions" config settings trailing space problem fixed + * "gz" added to default excluded extensions + * "change_frequency" setting fix + * skip redirections to non-html files + * interface enhacements + + +2005-07-07 v1.04 + + * full config with initial settings included + + +2005-07-07 v1.03 + + * "custom lastmod time" bug fixed + * all pages exluded when "exclude extensions" field is empty + + +2005-07-05 v1.02 + + * robots.txt protocol is supported ('*' and 'googlebot' user-agents are checked) + * view current process state when crawler is in background mode + * interrupt the crawler in background mode + * show real current path on the configuration page + * show sitemap summary block at the main (configuration) page + * check if sitemap exists on the analyze page to avoid warning messages + * split sitemaps on part per 49,999 URLs for consistency (instead of 50,000) + * redirections to external domains are not followed anymore + + +2005-07-04 v1.01 + + * run-in-background option + * minor bug-fixes + + +2005-07-03 v1.0 + + Initial Release + +---------------------------------------------- +http://www.xml-sitemaps.com diff --git a/generator/data/.htaccess b/generator/data/.htaccess new file mode 100755 index 0000000..8e68bc9 --- /dev/null +++ b/generator/data/.htaccess @@ -0,0 +1,6 @@ +order deny,allow + +deny from all + +allow from all + \ No newline at end of file diff --git a/generator/data/crawl_dump.log b/generator/data/crawl_dump.log new file mode 100755 index 0000000..71622ac Binary files /dev/null and b/generator/data/crawl_dump.log differ diff --git a/generator/data/generator.conf b/generator/data/generator.conf new file mode 100755 index 0000000..9bea569 --- /dev/null +++ b/generator/data/generator.conf @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/generator/data/placeholder.txt b/generator/data/placeholder.txt new file mode 100755 index 0000000..b3a4252 --- /dev/null +++ b/generator/data/placeholder.txt @@ -0,0 +1 @@ +placeholder \ No newline at end of file diff --git a/generator/data/sess_bprm9p4fl503nhno9tstadlbq1 b/generator/data/sess_bprm9p4fl503nhno9tstadlbq1 new file mode 100755 index 0000000..a836018 --- /dev/null +++ b/generator/data/sess_bprm9p4fl503nhno9tstadlbq1 @@ -0,0 +1 @@ +is_admin|b:1; \ No newline at end of file diff --git a/generator/default.conf b/generator/default.conf new file mode 100755 index 0000000..aa36601 --- /dev/null +++ b/generator/default.conf @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/generator/documentation.html b/generator/documentation.html new file mode 100755 index 0000000..7b24d64 --- /dev/null +++ b/generator/documentation.html @@ -0,0 +1,330 @@ + + + +XML Sitemaps Generator - Standalone version + + + + + +
    +

    Standalone XML Sitemap Generator

    + +
    + + + + + +
    + + +

    1. Introduction

    + + + + +

    1. Requirements

    + +
      +
    • The PHP XML generator will work with PHP 4.3.x or higher in default configuration +in Apache web-server environment. +
    • Sitemap generator connects to your website via http port 80, so your host should allow local network connections for php scripts (this is default configuration) +
    • For file permissions requirements please refer to "Installation" section. +
    • The memory size requirements (as well as the time required to complete sitemap generation) depends on the number of pages your website contains. +
    + + + +

    2. Installation

    + +
    +
      +
    1. Unpack the contents of distribution archive to the target folder on your server. +
    2. Make sure to set the following files permissions: +
        +
      • data/ folder - 0777 (rwxrwxrwx) +
      • /path/to/your/sitemap.xml - 0666 (rw-rw-rw-) see below (3.14) +
      +
    3. If you want the sitemap to be build periodically (daily, weekly etc) you should setup +the cron job to run the script using your hosting Control Panel. +The command to use for cron job is shown on the +"Crawling" page. +
    +
    + +

    2.1 Upgrade

    + +
    +If you have previous version of Sitemap Generator already installed, the following steps are required: +
      +
    1. Unpack the contents of distribution archive and upload the following files to the target folder on your server: +
        +
      • index.php +
      • all pages/* files +
      +
    +
    + + +

    3. Configuration tips

    +
      +
    1. Use the full url of your site for the "Starting URL" option. The crawler will explore only the URLs +within the starting directory, i.e. when starting URL is "http://www.example.com/path/index.html", +the "http://www.example.com/path/sub/page.html" will be indexed, but +"http://www.example.com/other/index.html" will NOT. + +
    2. "Save sitemap to" - is the filename in the "public_html/" folder of your website. This file +should be writable by the script. To make sure it is, create this file and set +its permissions to 0666. + + +
    3. It is recommended to use "Server's response" for "Last modification" field. In this case +the entries for static pages will be filled with their real last modification time, while +for dynamic pages the current time is used. + +
    4. "Do not parse" input field contains file types, separated by space. These files +will be added to the sitemap, but not fetched to save bandwidth, because they are +not html files and have no embedded links. Please make sure these files are indexed by Google +since there is no sense in adding them to sitemap otherwise! + +
    5. "Do not parse URLs" works together with the option above to increase the speed of sitemap generation. +If you are sure that some pages at your site do not contain the unique links to other pages, +you can tell generator not to fetch them. +
      For instance, if your site has "view article" pages with urls like "viewarticle.php?..", you +may want to add them here, because most likely all links inside these pages are already listed at +"higher level" (like the list of articles) documents as well: + +
      • viewarticle.php?id=
      + +
      If you are not sure what to write here, just leave this field empty. +Please note that these pages are still included into sitemap. + +
    6. "Exclude extensions" - these files are not crawled and not included in sitemap. + +
    7. To disallow the part of your website from inclusion to the sitemap use +"Exclude URLs" setting: all URLs that contain the strings specified will be skipped. +
      For instance, to exclude all pages within "www.domain.com/folder/" add this line: +
      • folder/
      +
      If your site has pages with lists that can be reordered by columns and URLs look like +"list.php?sort=column2", add this line to exclude duplicate content: +
      • sort=
      + +
      Anyway, you may leave this box empty to get ALL pages listed. + +
    8. "Include ONLY URLs" setting is the opposite to "Exclude URLs". When +it is not empty, ONLY the urls that match the substring entered are included into sitemap. + +
    9. "Individual attributes" setting allows you to set +specific values for last modification time, frequency andpriority per page. +To use it, define specific frequency and priority attributes in the following format: +"url substring,lastupdate YYYY-mm-dd,frequency,priority". +
      Example: +
      +page.php?product=,2005-11-14,monthly,0.9 + +
    10. You may want to limit the number of pages to index to make sure it will not be +endless if your website have an error like unlimited looped links. + +
    11. To limit the maximum running time of the script, define the "Maximum execution time" field +(in seconds). + +
    12. To have a possibility to use "Resume session" feature, define the "Save the script state" field. +This value means the intervals to save the crawler process state, so in case the script was interrupted, +you can continue the process from the last saved point. Set this value to "0" to disable savings. + +
    13. To reduce the load on your server made by the sitemap generator, you can add the "sleep" delay +after each N (configured) requests to your site for X seconds (configured). Leave blank ("0") values +to crawls the site without delays. + +
    14. Google doesn't support sitemap files with more than 50,000 pages. +That's why script supports "Sitemap Index" creation for the big sites. So, it will +create one sitemap index file and multiple sitemap files with 50 thousand pages each. +
      For instance, your website has about 140,000 pages. The XML sitemap generator will +create these files: + +
        +
      • "sitemap.xml" - sitemap index file that includes links to other files (filename depends on what you entered in the "Save sitemap to" field) +
      • "sitemap1.xml" - sitemap file (URLs from 1 to 50,000) +
      • "sitemap2.xml" - sitemap file (URLs from 50,001 to 100,000) +
      • "sitemap3.xml" - sitemap file (URLs from 100,001 to 140,000) +
      +Please make sure all of these files are writable if your website is large. + +
    15. Enable "Create HTML Sitemap" option to let generator create a sitemap for your visitors. +You should also define the "HTML Sitemap filename" where the sitemap will be stored. It is possible +to split html sitemap onto multiple files by defining the "Number of links per page in HTML sitemap" +option. +
      +The filenames are like the following: +
        +
      • "sitemap.html" - in case when all links fit in one file +
        OR +
      • "sitemap1.html" - site map file, page 1 +
      • "sitemap2.html" - site map file, page 2 +
      • etc +
      + +
      +Same as point above: please make sure all of these files are writable. +
      +
      +The site map pages layout can be modified to suit to your website in pages/mods/sitemap_tpl.html file. +
      +Besides modifying the stylesheet for html sitemap, you can change the way it is formatted. The basic template commands are: +
        +
      • <TLOOP XX>...</TLOOP> - defines a repeating sequence of code (like page numbers or sitemap links)
      • +
      • <TIF XX>...</TIF> - defines a conditional statement that is inserted only when a specific term is met
      • +
      • <TVAR XX> - inserts a value of a specified variable
      • +
      +Please refer to sitemap_tpl.html file for usage example. + + + + +
    16. Enable GZip compression of sitemap files to save on disk space and bandwidth. In this +case ".gz" will be added to sitemap filenames (like "sitemap.xml.gz"). + +
    17. "Sitemap URL" is the same file entered in "Save sitemap to" field, but in the URL form. +It is required to inform Google about sitemap address. + +
    18. Set "Ping Google" checkbox enabled to let the script inform Google on every sitemap +change. In this way you will always let google know about the fresh information on your site. + +
    19. If you want to restrict access to your generator pages, set the login and password here. + +
    + + +

    4. Usage

    +
      +
    1. The first step is the script "Configuration". +The script will show you the alert messages if the problem is found (e.g., config file +is not writable).
      +Do not forget to save the settings for your website after making the changes. +
    2. Try to crawl your site using "Crawling" page. Just +press "Run" button and you will see the generation progress information, including: +
        +
      • Links depth +
      • Current page +
      • Pages scanned +
      • Pages left +
      • Time passed +
      • Time left (estimated) +
      +Please be patient and wait for the crawling completion, for the large sites it may +take significant time. Upon the completion the script will automatically redirect you to the +"View Sitemap" page. + +
    3. For the large websites you may want to use "Run in background" option. In this case +the crawler will keep working even after you will click on the other page or even closed +your browser. + +
    4. When your previous session was interrupted by you or the script has been suspended by a +system, you can resume the process from the last saved state. The time intervals for state +saving is defined on the "Configuration" screen. + +
    5. Later on you may want to setup a cron job to refresh your sitemap (described above in +the "Installation" section). + +
    6. When the generator script is running (either with cron or using "Run in background" +feature), you will see it's progress state on "Crawling" page. There you will also find +the link to stop the script, which is very useful for big sites because you don't +have to wait +until it is finished if you want to modify the configuration and re-run the script. + +
    7. On the "View Sitemap" page the content of the recently generated sitemap is displayed. +For the large sites multiple parts are shown, including sitemap index and every sitemap +file separately. + +
    8. +When the sitemap is already generated, "Sitemap details" block appears in the left column of the pages. +It contains a link to download xml sitemap and also a sitemap in text format (one URL per line). +Some other details are also available: +
        +
      • Request date +
      • Processing time (sec) +
      • Pages indexed +
      • Sitemap files +
      • Pages size (Mb) +
      + +
    9. "Analyze" feature allows you to easily investigate +the site structure. It represents the tree-like list of directories of your website, +indicating the number of pages in every folder. You can expand/collapse the tree parts +by clicking the [x] signs. + +
    10. Sometimes it is very helpful to know the dynamics of the sites contents. The +"ChangeLog" page shows the list of all crawling sessions, +including: +
        +
      • Date/Time +
      • Total pages +
      • Proc.time, sec +
      • Bandwidth, Mb +
      • Number of New URLs +
      • Number of Removed URLs +
      • Number of Broken links +
      + +You can click any of the sessions titles to see detailed page with the full list of +"Added URLs" and "Removed URLs". As you may see, on this page you will +easily track how website changes in time, which is especially useful for large dynamic, +database-driven sites. + +
    11. One more feature that is naturally supported by website crawler is +"Broken Links" list page. You will +see all the pages URLs that were failed to load by the script (HTTP code 404 was returned) +AND also corresponding list of pages that refer to the broken pages. +Having this page on the screen you can easily fix this problem on your website. + +
    12. Concluding, if you will setup the cron job to run the Google sitemap creator script +and enable "Inform Google" feature, everything will work automatically without a +user interaction required. +
      And you still can refer to interesting details at Analyze, ChangeLog, Broken Links +and View Sitemap pages at any time. + +
    +
    + + + +
    +
    + + + + \ No newline at end of file diff --git a/generator/howto-install.pdf b/generator/howto-install.pdf new file mode 100755 index 0000000..f79e07f Binary files /dev/null and b/generator/howto-install.pdf differ diff --git a/generator/index.php b/generator/index.php new file mode 100755 index 0000000..06871ef --- /dev/null +++ b/generator/index.php @@ -0,0 +1,201 @@ +$v) $rt.=" '$k' => '".addslashes($v)."',"; $rt.=")"; return $rt; } error_reporting(E_ALL&~E_NOTICE); define('i3SMAPpcK', 'sva@negjro.hn'); define('XML_DOWNLOAD_DATE', '2016-08-10 14:02:24'); @ini_set ("include_path", ini_get ("include_path") . '.;pages/;'.(dirname(__FILE__).'\\pages').''); @ini_set ("serialize_precision", 5); define('smWzxPC1LKDbUte','crawl_dump.log'); define('Uv9x2nKq2xFMz','crawl_state.log'); define('AheSQAhNo9A7oMn','crawl_state_bak.log'); define('wLyh1d0ilMb','interrupt.log'); define('qDot7WxFYvQPR', dirname(__FILE__).'/'); define('Il2qN32A6EeND', dirname(__FILE__).'/pages/'); define('zuXb1RhRl0', dirname(__FILE__).'/pages/mods/'); define('dVANLaXfylWyj7', 44824); include qDot7WxFYvQPR.'pages/class.utils.inc.php'; preg_match('#index\.([a-z0-9]+)(\(.+)?$#',__FILE__,$pm); $jDyVj7CkPgy = $pm[1] ? $pm[1] : 'php'; define('LKwlfmXlFQZwAHyN', dirname(__FILE__).'/default.conf'); if(function_exists('ini_set')) @ini_set("magic_quotes_runtime",'Off'); $grab_parameters = isset($grab_parameters) ? $grab_parameters : array(); if(isset($grab_parameters['xs_password'])) $grab_parameters['xs_password']=md5($grab_parameters['xs_password']); eiTxuqFQGsvY(LKwlfmXlFQZwAHyN, $grab_parameters, true); if(!defined('ebJGVa__YE')) define('ebJGVa__YE', isset($grab_parameters['xs_datfolder']) ? $grab_parameters['xs_datfolder'] : dirname(__FILE__).'/data/'); define('QKL711IVYlu7s9YRPO', ebJGVa__YE.'progress/'); define('VrIhIZ2UGhCqDiv', ebJGVa__YE.'generator.conf'); if(!eiTxuqFQGsvY(VrIhIZ2UGhCqDiv, $grab_parameters) && isset($sAg5YsdwOc)){ $GLOBALS['sg_runerror'] = 'Configuration file not found: '.VrIhIZ2UGhCqDiv; return; } define('JKuuSDWmKU5r3A502',(isset($grab_parameters['xs_sm_text_filename'])&&$grab_parameters['xs_sm_text_filename']) ? $grab_parameters['xs_sm_text_filename'] : ebJGVa__YE . 'urllist.txt'); define('JcYkhlEMDOd63veSaCB', (isset($grab_parameters['xs_sm_text_url'])&&$grab_parameters['xs_sm_text_url']) ? $grab_parameters['xs_sm_text_url'] : 'data/urllist.txt'); define('vCm7s9tc6', preg_replace('#[^\\/]+?\.xml$#', $grab_parameters['xs_rssfilename'], $grab_parameters['xs_smname'])); define('wqhIa8lyw', preg_replace('#[^\\/]+?\.xml$#', 'ror.xml', $grab_parameters['xs_smname'])); define('r7TDdgweuX4nLJSSG',preg_replace('#[^\\/]+?\.xml$#', 'ror.xml', $grab_parameters['xs_smurl'])); define('G2z7RcI6R969uBUdPAI', ebJGVa__YE . 'gbase.xml'); define('Pl78ZpRHcI', 'data/gbase.xml'); if(!$_GET&&$HTTP_GET_VARS)$_GET=$HTTP_GET_VARS; if(!$_POST&&isset($HTTP_POST_VARS))$_POST=$HTTP_POST_VARS; if(function_exists('ini_set')) { @ini_set ("output_buffering", '0'); if($grab_parameters['xs_memlimit']) @ini_set ("memory_limit", $grab_parameters['xs_memlimit'].'M'); if($grab_parameters['xs_exec_time']) @ini_set ("max_execution_time", $grab_parameters['xs_exec_time']); @ini_set("session.save_handler",'files'); @ini_set('session.save_path', ebJGVa__YE); } if(@ini_get("magic_quotes_gpc")){ if($_GET)foreach($_GET as $k=>$v){$_GET[$k]=stripslashes($v);} if($_POST)foreach($_POST as $k=>$v){$_POST[$k]=stripslashes($v);} } $op=$_REQUEST['op']; if(function_exists('session_start') && !isset($sAg5YsdwOc)) @session_start(); if($op=='logout'){ $_SESSION['is_admin'] = false; setcookie('sm_log',''); unset($op); } if(!isset($op)) $op = 'config'; if(!$_SESSION['is_admin']) $_SESSION['is_admin'] = ($_COOKIE['sm_log']==(md5($grab_parameters['xs_login']).'-'.md5($grab_parameters['xs_password']))); if(!$_SESSION['is_admin'] && $op != 'crawlproc') { include qDot7WxFYvQPR.'pages/page-login.inc.php'; if(!$_SESSION['is_admin']) exit; } define('BK2AXP6fR', true); include qDot7WxFYvQPR.'pages/page-configinit.inc.php'; include qDot7WxFYvQPR.'pages/class.http.inc.php'; switch($op){ case 'crawl': case 'crawlproc': case 'config': case 'view': case 'analyze': case 'chlog': case 'l404': case 'reflinks': case 'ext': case 'proc': include qDot7WxFYvQPR.'pages/page-'.$op.'.inc.php'; break; case 'pinfo': phpinfo(); break; } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/license.html b/generator/license.html new file mode 100755 index 0000000..6c869d1 --- /dev/null +++ b/generator/license.html @@ -0,0 +1,69 @@ + + + +XML Sitemaps Generator - Standalone version + + + + +
    +

    License for Standalone XML Sitemap Generator

    +
    + + + +
    + + +

    LICENSE GRANT

    + +XML-Sitemaps team ("XML-Sitemaps") grants you a non-exclusive license to use this software, and any associated documentation ("The Software"), as indicated +herein. If you have purchased a Single License, multiple copies of the Software may be installed +and used, but for internal use only, for your personal websites. +It cannot be used to create sitemaps for 3rd party sites or provided a service to others (paid or free). +The Software is +in "use" on a server when it has been loaded into temporary memory (i.e. RAM) +or installed into permanent memory (hard disk or other device) of that computer. + +

    RESTRICTIONS

    + +You MAY NOT: +
      +
    • (a) copy and distribute the Software or any portion of it; +
    • (b) sublicense, lease, rent, or transfer this Software to another; +
    • (c) cause or permit reverse engineering, disassembly, decompilation or alteration of this +Software; +
    • (d) remove any product identification, copyright notices, or other notices or +proprietary restrictions from this Software; +
    • (e) copy the documentation accompanying the software. +
    + +

    TERM

    + +This License is effective until terminated. You may terminate it at any time by destroying the Software, together with all copies thereof. This License will also terminate if you fail to comply with any term or condition of this Agreement. Upon such termination, you agree to destroy the Software, together with all copies thereof. +
    +By downloading the software you agree that you examined all requirements to run the Software. No refunds will be given after that. + +

    COPYRIGHT/OWNERSHIP

    + +This Software and its source code are proprietary products of XML-Sitemaps and are protected by copyright and other intellectual property laws. The Software is licensed and not sold. You acquire only the right to use the Software and do not acquire any rights, express or implied, in the Software other than those specified in this License. + +

    DISCLAIMER OF WARRANTIES

    + +The Software is supplied "AS IS". XML-Sitemaps disclaims all warranties, expressed or implied, including, without limitation, the warranties of merchantability and of fitness for any purpose. The user must assume the entire risk of using the Software. + +

    DISCLAIMER OF DAMAGES

    + +XML-Sitemaps assumes no liability for damages, direct or consequential, which may result from the use of the Software, even if XML-Sitemaps has been advised of the possibility of such damages. Any liability of the seller will be limited to refund the purchase price. + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/generator/pages/class.gping.inc.php b/generator/pages/class.gping.inc.php new file mode 100755 index 0000000..f112b00 --- /dev/null +++ b/generator/pages/class.gping.inc.php @@ -0,0 +1,201 @@ +$ri) { if(is_array($ri['urls'])) foreach($ri['urls'] as $TpQN9kkrncje4u) { foreach($zyGoJM7SL as $cDdos7BIlJ) if($cDdos7BIlJ) { $cDdos7BIlJ .= urlencode($TpQN9kkrncje4u); $K5kCC5JoHjozL->fetch($cDdos7BIlJ); } } } } function SgSv9EHvXQ8D($TpQN9kkrncje4u,$y_id) { global $K5kCC5JoHjozL; for($i=0;$i weblogUpdates.ping ' . $psf7nhFBQzfQO7 . ' ' . $pZraQah5aJyN . '/ '; $zyGoJM7SL= preg_split('#[\r\n]+#', $XjWSHkCxWdmWWs); foreach($zyGoJM7SL as $_u) { $oHXaaeWlrm8J5445 = $K5kCC5JoHjozL->fetch($_u, 0, false, false, $x_query); } } } $YF0XpEM2w4 = new GPing(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/pages/class.grab.inc.php b/generator/pages/class.grab.inc.php new file mode 100755 index 0000000..8ac5a59 --- /dev/null +++ b/generator/pages/class.grab.inc.php @@ -0,0 +1,2189 @@ +ctime = $MaMJn8Q5cIWqbSsi3R[0]+$MaMJn8Q5cIWqbSsi3R[1] - $this->L3KcxI6fDP; + +$_ut = ($this->ctime - $tDJZkTUkMBALBf1 > 5); +if( $_ut || $UVtSAwQYOsEzzCeKfY || ( ( ( $this->pl==0||$this->pn==1 || ($this->pn%$grab_parameters['xs_progupdate'])==0) || $this->VP8vAJd3fs3x1Ygo>=$this->qWPODI2gyt3Aa) +&& ($this->hDqkwjeqw['pn'] != $this->pn) +&& !$XJMFGqwQ_v3sQa0y ) ) +{ +$this->hDqkwjeqw['pn'] = $this->pn; +$tDJZkTUkMBALBf1 = $this->ctime; $this->mu = function_exists('memory_get_usage') ? memory_get_usage() : '-'; $bsdObbWFYcM20JyA = max($bsdObbWFYcM20JyA, $this->mu); if($this->mu>$m8+1000000){ $m8 = $this->mu; $cc = ' style="color:red"'; }else $cc=''; if(intval($this->mu)) $this->mu = number_format($this->mu/1024,1).' Kb'; z_fhGrViQaOeql9("\n(memory".($cc?' up':'').": $this->mu)
    \n"); $this->progpar = array( $this->ctime, // 0. running time + str_replace($this->iK6zN3FNMZ, '', $this->F4IXRYNqGySShUMjj), // 1. current URL + $this->pl, // 2. urls left + $this->pn, // 3. processed urls + $this->tsize, // 4. bandwidth usage + $this->links_level, // 5. depth level + $this->mu, // 6. memory usage + $this->VP8vAJd3fs3x1Ygo, // 7. added in sitemap + $this->ApWk9cNV4bVZkvPX, // 8. in the queue + $this->nettime, // 9. network time + $this->hOuc4HLzwywe, // 10. last net time + $this->fetch_no, // 11. fetched urls + $this->dO303CwfI // 12. number of added images/videos/etc + ); if($this->lT0Vs3VxjBxAH3['bgexec']){ if(((time()-$naPDZDyR2SqyxQvp)>e6p6oz8D73L8('xs_state_interval',5)) || $UVtSAwQYOsEzzCeKfY){ $naPDZDyR2SqyxQvp = time(); $this->progpar[] = fiJIJjF_yojaqa(); if($XJMFGqwQ_v3sQa0y){ $this->progpar[] = $XJMFGqwQ_v3sQa0y; } QNBZB8U2gUbUbMO(Uv9x2nKq2xFMz,G8ByTBG0gz4G9($this->progpar)); } } if($this->d069GWOopKkeA && (!$this->vBIKyMEhBONsP['f'] || $_ut)) { call_user_func($this->d069GWOopKkeA,$this->progpar); } } else { call_user_func($this->d069GWOopKkeA,array('cmd'=>'ping', 'bg' => $this->lT0Vs3VxjBxAH3['bgexec'])); } return $this->progpar; } function MTvi5BisLl($nm, $cn){ preg_match('#]*name="'.$nm.'"[^>]*value="(.*?)"#is', $cn, $_inpm); return $_inpm[1]; } function SWv7WC7WEJVO($cn, $dp){ global $grab_parameters,$K5kCC5JoHjozL; $cKCGec1Tw = array(); if(strstr($cn, '__VIEWSTATE')){ preg_match_all('#]*action="(.*?)".*?"__VIEWSTATE".*?#is', $cn, $_vsm); foreach($_vsm[0] as $i=>$_vm) { $_action = $_vsm[1][$i]; $cCqeu6KEd4LFk = $this->XQa0UewN3f($_action, $this->F4IXRYNqGySShUMjj); if($cCqeu6KEd4LFk == 1) continue; $_fex2 = $this->HnabdBaTOZ($_action); if($_fex2['f'])continue; $dSeuGOAE_8dFCli = array('__VIEWSTATE','__VIEWSTATEGENERATOR','__EVENTVALIDATION'); $YaDivn1VBzy6yJ = array(); foreach($dSeuGOAE_8dFCli as $p) $YaDivn1VBzy6yJ[$p] = $this->MTvi5BisLl($p, $_vm); $Q6E2sX2sXDNUc = array(); preg_match_all('#__doPostBack(\(.*?\))#is', $_vm, $_dpball); foreach($_dpball[1] as $_dpb) { $_dpb = stripslashes(str_replace(''',"'",$_dpb)); if(preg_match('#\'(.*?)\'(?:\s*\,\'(.*?)\')?#', $_dpb, $_a)){ if($Q6E2sX2sXDNUc[$_a[1]]++) continue; $_fex2 = $this->HnabdBaTOZ($_a[1]); if(!$_fex2['f'] ){ $lT0Vs3VxjBxAH3 = $YaDivn1VBzy6yJ; $lT0Vs3VxjBxAH3['__EVENTTARGET'] = $_a[1]; $lT0Vs3VxjBxAH3['__EVENTARGUMENT'] = $_a[2]; z_fhGrViQaOeql9("\n(post $dp) $_action -> $_a[1]\n"); $O3mTecPWsZVPj45u = $K5kCC5JoHjozL->fetch($_action, 0, false, false, http_build_query($lT0Vs3VxjBxAH3,'','&'), array('contenttype'=>'application/x-www-form-urlencoded')); $this->ffpknLH3lruh(); if(($_action != $O3mTecPWsZVPj45u['last_url'])){ $cKCGec1Tw[] = $O3mTecPWsZVPj45u['last_url']; }else { $cKCGec1Tw = array_merge($cKCGec1Tw, $this->J288sfitpupJnEcw3($O3mTecPWsZVPj45u['content'], $dp+1)); } z_fhGrViQaOeql9("\n>>".count($cKCGec1Tw).", ".$cKCGec1Tw[0]."\n"); } } } } } return $cKCGec1Tw; } function J288sfitpupJnEcw3($cn, $dp = 0){ global $grab_parameters; if($dp>1)return array(); $mVBhOIPtuHXMVt3_B = $grab_parameters['xs_utf8_enc'] ? 'isu':'is'; $_t = 'a|area|go'; if(!$grab_parameters['xs_disable_feed']) $_t .= '|link'; preg_match_all('#<(?:'.$_t.')(?:[^>]*?\s)href\s*=\s*(?:"([^"]*)|\'([^\']*)|([^\s\"\\\\>]+))[^>]*>#is'.$mVBhOIPtuHXMVt3_B, $cn, $am); preg_match_all('#]*?)?value\s*=\s*"(http[^"]*)#is'.$mVBhOIPtuHXMVt3_B, $cn, $wbHEDNyTv6j); $_sc = 'i?frame'.($grab_parameters['xs_parse_js'] ? '|script':''); preg_match_all('#<'.$_sc.'\s[^>]*?src\s*=\s*["\']?(.*?)("|>|\')#is', $cn, $nexwy0P_rGvjchKEd); preg_match_all('#]*http-equiv\s*=\s*"?refresh[^>]*URL\s*=\s*["\']?(.*?)("|>|\'[>\s])#'.$mVBhOIPtuHXMVt3_B, $cn, $NrUnGhCWocSUEo); if($grab_parameters['xs_parse_swf']) preg_match_all('#]*application/x-shockwave-flash[^>]*data\s*=\s*["\']([^"\'>]+).*?>#'.$mVBhOIPtuHXMVt3_B, $cn, $SXMDOThfSvBx_D); + + else $SXMDOThfSvBx_D = array(array(),array()); + + + preg_match_all('#]*?onclick\s*=\s*"[^"]*\.load\(\'([^\']*)#'.$mVBhOIPtuHXMVt3_B, $cn, $WQDjuasXLg); + + + preg_match_all('#"url"\:"(http[^"]*)#is'.$mVBhOIPtuHXMVt3_B, $cn, $uy4KVwRH1rG28p_); + + $cKCGec1Tw = array(); + + $fQ0AoPlprI = 'stylesheet|publisher'; + + if(isset($grab_parameters['xs_robotstxt']) && $grab_parameters['xs_robotstxt']) + + $fQ0AoPlprI .= '|nofollow'; + + for($i=0;$ihVgV5J75NEESyCQgUY('xs_parse_js_only', $this->F4IXRYNqGySShUMjj, true) + + ){ + + z_fhGrViQaOeql9("\n*** Parse JS - ".$this->F4IXRYNqGySShUMjj."\n"); + + + $cKCGec1Tw = @array_merge($cKCGec1Tw, $this->SWv7WC7WEJVO($cn, $dp)); + + } + + return $cKCGec1Tw; + + } + + function KH6aKAnNWiCYJWvf($q2PfaTx_3ig){ + + + return preg_replace('#^(www|\w)\.#', '', $q2PfaTx_3ig); + + } + + function XQa0UewN3f(&$a, $EYyBXYy9WWbLGYL5iQ, $blUx9Th8GWx0bsSC = '') + + { + + global $grab_parameters; + + $OdZB8ypqkYH0RE87bq = $this->OdZB8ypqkYH0RE87bq; + + $KrTMgWoxdnmEih0271 = $this->KrTMgWoxdnmEih0271; + + + + if(strstr($EYyBXYy9WWbLGYL5iQ,'://')) { + + $OdZB8ypqkYH0RE87bq = preg_replace('#(:\/\/.*?)\/.*$#', '$01', $KrTMgWoxdnmEih0271); + + + } + + $WyXkTyAK3kSMA = parse_url($this->Niq61B3f5T); + + if($WyXkTyAK3kSMA['scheme'] && substr($a, 0, 2) == '//') + + $a = $WyXkTyAK3kSMA['scheme'].':'.$a; + + $KsbskAuOsxLPc1sC = @parse_url($a); + + if($KsbskAuOsxLPc1sC['scheme'] && ($KsbskAuOsxLPc1sC['scheme']!='http')&& ($KsbskAuOsxLPc1sC['scheme']!='https')) { + + $cCqeu6KEd4LFk = 1; + + }else { + + $a = str_replace(':80/', '/', $a); + $a = str_replace(':443/', '/', $a); + + if($a[0]=='?')$a = preg_replace('#^([^\?]*?)([^/\?]*?)(\?.*)?$#','$2',$EYyBXYy9WWbLGYL5iQ).$a; + + if($grab_parameters['xs_inc_ajax'] && strstr($a,'#!')){ + + $KrTMgWoxdnmEih0271 = preg_replace('#\#.*$#', '', $KrTMgWoxdnmEih0271); + + if($a[0] != '/' && !strstr($a,':/')) + + $a = $KrTMgWoxdnmEih0271 . preg_replace('#^([^\#]*?/)?([^/\#]*)?(\#.*)?$#', '$2', $EYyBXYy9WWbLGYL5iQ).$a; + + } + + if(preg_match('#^https?(:|&\#58;)#is',$a)){ + + if(preg_match('#://[^/]*$#is',$a)) + + $a .= '/'; + + } + + else if($a&&$a[0]=='/')$a = $OdZB8ypqkYH0RE87bq.$a; + + else $a = $KrTMgWoxdnmEih0271.$a; + + if($a[0]=='/')$a = $OdZB8ypqkYH0RE87bq.$a; + + $a=str_replace('/./','/',$a); + + $a=preg_replace('#/\.$#','/',$a); + + if(substr($a,-2) == '..')$a.='/'; + + if(strstr($a,'../')){ + + preg_match('#(.*?:.*?//.*?)(/.*)$#',$a,$aa); + + do{ + + $ap = $aa[2]; + + $aa[2] = preg_replace('#/?[^/]*/\.\.#','',$ap,1); + + }while($aa[2]!=$ap); + + $a = $aa[1].$aa[2]; + + } + + $a = preg_replace('#/\./#','/',$a); + + $a = str_replace( + + array('&','&','&',':',':','/', '/'), + + array('&', '&', '&', ':', ':', '/', '/') + + ,$a); + + + + + $a = preg_replace('#([^&])\#'.($grab_parameters['xs_inc_ajax']?'([^\!]|$)':'').'.*$#','$01',$a); + + + $a = preg_replace('#^(/)/+#','\\1',$a); + + + $a = preg_replace('#[\r\n]+#s','',$a); + + + if($grab_parameters['xs_cleanurls']) + + $a = @preg_replace($grab_parameters['xs_cleanurls'],'',$a); + + if($grab_parameters['xs_custom_replace']){ + + global $Uem3Rs_JAbbzZ; + + if(!isset($Uem3Rs_JAbbzZ)){ + + $_ar = preg_split('#[\r\n]+#', trim($grab_parameters['xs_custom_replace'])); + + $Uem3Rs_JAbbzZ = array(); + + foreach($_ar as $v){ + + $me = explode(' ', $v); + + if($me[0]&&$me[1])$Uem3Rs_JAbbzZ['#'.$me[0].'#'] = $me[1]; + + } + + } + + if($Uem3Rs_JAbbzZ){ + + $a = @preg_replace(array_keys($Uem3Rs_JAbbzZ),array_values($Uem3Rs_JAbbzZ),$a); + + } + + } + + if($grab_parameters['xs_cleanpar']) + + { + + do { + + $jwblm4pgqCSdGONbuY = $a; + +//$a = @preg_replace('#[\\?\\&]('.$grab_parameters['xs_cleanpar'].')=[a-z0-9\-\.\_\=\/]+$#i','',$a); +$a = @preg_replace('#[\\?\\&]('.$grab_parameters['xs_cleanpar'].')=[a-z0-9\-\.\_\=\/]*$#i','',$a); + +//$a = @preg_replace('#([\\?\\&])('.$grab_parameters['xs_cleanpar'].')=[a-z0-9\-\.\_\=\/]+&#i','$1',$a); +$a = @preg_replace('#([\\?\\&])('.$grab_parameters['xs_cleanpar'].')=[a-z0-9\-\.\_\=\/]*&#i','$1',$a); + + }while($a != $jwblm4pgqCSdGONbuY); + + $a = @preg_replace('#\?\&?$#','',$a); + + } + + + $cCqeu6KEd4LFk = (strtolower(substr($a,0,strlen($this->Niq61B3f5T)) ) != strtolower($this->Niq61B3f5T)) ? 1 : 0; + + if($cCqeu6KEd4LFk && $grab_parameters['xs_allow_subdomains']){ + + $KsbskAuOsxLPc1sC = @parse_url($a); + + if($KsbskAuOsxLPc1sC['host'] && + + + preg_match('#^(.*?\.)?'.preg_quote($this->KH6aKAnNWiCYJWvf($WyXkTyAK3kSMA['host']),'#').'$#', $KsbskAuOsxLPc1sC['host']) + + ){ + + $cCqeu6KEd4LFk = 2; + + } + + } + + if($cCqeu6KEd4LFk && $blUx9Th8GWx0bsSC) { + + + $r8lJYbqC8z9vA_YwgZ = $this->dYfVkEYUS1map3XFd8($blUx9Th8GWx0bsSC); + + + if($r8lJYbqC8z9vA_YwgZ && preg_match('#('.$r8lJYbqC8z9vA_YwgZ.')#', $a)) + + $cCqeu6KEd4LFk = 2; + + } + + } + + z_fhGrViQaOeql9("
    ($a -- $cCqeu6KEd4LFk - $EYyBXYy9WWbLGYL5iQ - $OdZB8ypqkYH0RE87bq - $KrTMgWoxdnmEih0271 - [".$this->KH6aKAnNWiCYJWvf($WyXkTyAK3kSMA['host']).", ".$KsbskAuOsxLPc1sC['host']."])
    \n",3); + + return $cCqeu6KEd4LFk; + + } + + function hVgV5J75NEESyCQgUY($oJ5unwFQhNolkKRYs, $EYyBXYy9WWbLGYL5iQ, $OBfrooBYrp0IcNgFcy5 = true){ + + global $XATMoSEjrtJR2AWn9u,$grab_parameters; + + $dA8T7ubjCXUZ2 = $OBfrooBYrp0IcNgFcy5; + + if($grab_parameters[$oJ5unwFQhNolkKRYs]){ + + if(!isset($XATMoSEjrtJR2AWn9u[$oJ5unwFQhNolkKRYs])){ + + $XATMoSEjrtJR2AWn9u[$oJ5unwFQhNolkKRYs] = $grab_parameters[$oJ5unwFQhNolkKRYs]; + + if(!preg_match('#[\*\$]#',$XATMoSEjrtJR2AWn9u[$oJ5unwFQhNolkKRYs])) + + $XATMoSEjrtJR2AWn9u[$oJ5unwFQhNolkKRYs] = preg_quote($XATMoSEjrtJR2AWn9u[$oJ5unwFQhNolkKRYs],'#'); + + $XATMoSEjrtJR2AWn9u[$oJ5unwFQhNolkKRYs] = '#'.str_replace(' ', '|', $XATMoSEjrtJR2AWn9u[$oJ5unwFQhNolkKRYs]).'#'; + + } + + $dA8T7ubjCXUZ2 = preg_match($XATMoSEjrtJR2AWn9u[$oJ5unwFQhNolkKRYs],$EYyBXYy9WWbLGYL5iQ); + + } + + return $dA8T7ubjCXUZ2; + + } + + function dYfVkEYUS1map3XFd8($KDTEDseXOWMlsG){ + + if(!isset($this->v9IRE8CtKo6[$KDTEDseXOWMlsG])){ + + $this->v9IRE8CtKo6[$KDTEDseXOWMlsG] = trim($KDTEDseXOWMlsG) ? preg_replace("#\s*[\r\n]+\s*#",'|', (strstr($s=trim($KDTEDseXOWMlsG),'*')?$s:preg_quote($s,'#'))) : ''; + + } + + return $this->v9IRE8CtKo6[$KDTEDseXOWMlsG]; + + } + + function fylX1lYhxq9Swj9($m2GAv90hXZhKCGR, $EYyBXYy9WWbLGYL5iQ) { + + $f = false; + + if($m2GAv90hXZhKCGR) + + foreach($m2GAv90hXZhKCGR as $bm) + + { + + $f = $f || preg_match('#^('.$bm.')#', $EYyBXYy9WWbLGYL5iQ); + + } + + return $f; + + } + + function VFZlf5sNkzX7GF7k($EYyBXYy9WWbLGYL5iQ) { + + return $this->fylX1lYhxq9Swj9($this->Nt_1IROZP14owm4DAeH, $EYyBXYy9WWbLGYL5iQ) + + && !$this->fylX1lYhxq9Swj9($this->botmatch_allow, $EYyBXYy9WWbLGYL5iQ); + + } + + function HnabdBaTOZ(&$EYyBXYy9WWbLGYL5iQ) { + + global $grab_parameters; + + if(isset($this->xNVJOXeK2sW[$EYyBXYy9WWbLGYL5iQ])) + + $EYyBXYy9WWbLGYL5iQ =$this->xNVJOXeK2sW[$EYyBXYy9WWbLGYL5iQ]; + + $f = $this->HDxSUg0eWtUQjt && preg_match('#'.$grab_parameters['xs_exc_skip'].'#i',$EYyBXYy9WWbLGYL5iQ); + + if($this->GjJcq8T1P9&&!$f)$f=$f||@preg_match('#('.$this->GjJcq8T1P9.')#',$EYyBXYy9WWbLGYL5iQ); + + if($this->duBMhqfH7kGKH && $f && $grab_parameters['xs_incl_force']) + + $f = !preg_match('#('.$this->duBMhqfH7kGKH.')#',$EYyBXYy9WWbLGYL5iQ); + + $f = $f || $this->VFZlf5sNkzX7GF7k($this->T_IVB6tYAThxWS . $EYyBXYy9WWbLGYL5iQ); + + $f2 = false; + + $mXVOQkdQzwnNzlTzU = false; + + if(!$f) + + { + + $f2 = $this->kNSV2dId7YB && preg_match('#'.$grab_parameters['xs_inc_skip'].'#i',$EYyBXYy9WWbLGYL5iQ); + + if($this->duBMhqfH7kGKH && !$f2) + + $f2 = $f2||(preg_match('#('.$this->duBMhqfH7kGKH.')#',$EYyBXYy9WWbLGYL5iQ)); + + if($grab_parameters['xs_parse_only'] && !$f2 && $EYyBXYy9WWbLGYL5iQ && ($EYyBXYy9WWbLGYL5iQ!='/')) + + { + + + $f2 = $f2 || !$this->hVgV5J75NEESyCQgUY('xs_parse_only', $EYyBXYy9WWbLGYL5iQ, true); + + } + + } + + $f3 = false; + + if($this->noincmask)$f3=@preg_match('#('.$this->noincmask.')#',$EYyBXYy9WWbLGYL5iQ); + + return array('f' => $f, 'f2' => $f2, 'f3' => $f3); + + } + + + + function pJIy8HIUg($lT0Vs3VxjBxAH3,&$urls_completed) { + + global $grab_parameters,$K5kCC5JoHjozL; + + + error_reporting(E_ALL&~E_NOTICE); + + $this->lT0Vs3VxjBxAH3 = $lT0Vs3VxjBxAH3; + + @set_time_limit($grab_parameters['xs_exec_time']); + + if($this->lT0Vs3VxjBxAH3['bgexec']) + + { + + ignore_user_abort(true); + + } + + register_shutdown_function('MjfS99JQfMEzIgi'); + + if(function_exists('ini_set')) + + { + + @ini_set("zlib.output_compression", 0); + + @ini_set("output_buffering", 0); + + } + + $MaMJn8Q5cIWqbSsi3R = explode(" ",microtime()); + + $this->L3KcxI6fDP = $MaMJn8Q5cIWqbSsi3R[0]+$MaMJn8Q5cIWqbSsi3R[1]; + + $starttime = $u3Aj3kpP8f7NX = time(); + + $bsdObbWFYcM20JyA = $this->nettime = 0; + + $this->iK6zN3FNMZ = $this->lT0Vs3VxjBxAH3['initurl']; + + $this->qWPODI2gyt3Aa = $this->lT0Vs3VxjBxAH3['maxpg']>0 ? $this->lT0Vs3VxjBxAH3['maxpg'] : 1E10; + + $RlO1HaAgQ = $this->lT0Vs3VxjBxAH3['maxdepth'] ? $this->lT0Vs3VxjBxAH3['maxdepth'] : -1; + + $this->d069GWOopKkeA = $this->lT0Vs3VxjBxAH3['progress_callback']; + + $this->GjJcq8T1P9 = $this->dYfVkEYUS1map3XFd8($grab_parameters['xs_excl_urls']); + + $this->duBMhqfH7kGKH = $this->dYfVkEYUS1map3XFd8($grab_parameters['xs_incl_urls']); + + $this->noincmask = $this->dYfVkEYUS1map3XFd8($grab_parameters['xs_noincl_urls']); + + $b7bWC1DiTPmt8mWhN = $this->dYfVkEYUS1map3XFd8($grab_parameters['xs_prev_sm_incl']); + + $Hqm42kdaBr = $gjEB17v5UJj1SxRZ = array(); + + $ZR1vtYkW3IIT6ji = ''; + + $tV12hsJy_ = preg_split('#[\r\n]+#', $grab_parameters['xs_ind_attr']); + + $gk7xyukmlMb = '#200'.($grab_parameters['xs_allow_httpcode']?'|'.$grab_parameters['xs_allow_httpcode']:'').'#'; + + $kYhgTL6xjtaMnUKyj = '#400|429'.($grab_parameters['xs_badreq_httpcode']?'|'.$grab_parameters['xs_badreq_httpcode']:'').'#'; + + if($grab_parameters['xs_memsave']) + + { + + if(!file_exists(QKL711IVYlu7s9YRPO)) + + mkdir(QKL711IVYlu7s9YRPO, 0777); + + else + + if($this->lT0Vs3VxjBxAH3['resume']=='') + + Znq7ffD8tRtK7G7k(QKL711IVYlu7s9YRPO, '.txt'); + + } + + foreach($tV12hsJy_ as $ia) + + if($ia) + + { + + $is = explode(',', $ia); + + if($is[0][0]=='$') + + $fAd6l0J5ko7BH6Qi = substr($is[0], 1); + + else + + $fAd6l0J5ko7BH6Qi = str_replace(array('\\^', '\\$'), array('^','$'), preg_quote($is[0],'#')); + + $gjEB17v5UJj1SxRZ[] = $fAd6l0J5ko7BH6Qi; + + + $Hqm42kdaBr[] = + + array('lm' => $is[1], 'f' => $is[2], 'p' => $is[3]); + + } + + if($gjEB17v5UJj1SxRZ) + + $ZR1vtYkW3IIT6ji = '('.implode(')|(',$gjEB17v5UJj1SxRZ).')'; + + $bcUHiUvk1__NNu9qID = parse_url($this->iK6zN3FNMZ); + + if(!$bcUHiUvk1__NNu9qID['path']){$this->iK6zN3FNMZ.='/';$bcUHiUvk1__NNu9qID = parse_url($this->iK6zN3FNMZ);} + + if($grab_parameters['xs_moreurls']){ + + + $this->mu = preg_split('#[\r\n]+#', $grab_parameters['xs_moreurls']); + + foreach($this->mu as $mi=>$nO36g2p2q_KYnh7qxVo){ + + $nO36g2p2q_KYnh7qxVo = str_replace($this->Niq61B3f5T, '', $nO36g2p2q_KYnh7qxVo); + + $O3mTecPWsZVPj45u = $K5kCC5JoHjozL->fetch($nO36g2p2q_KYnh7qxVo,0,true); + + if($mi>3)break; + + } + + } + + $O3mTecPWsZVPj45u = $K5kCC5JoHjozL->fetch($this->iK6zN3FNMZ,0,true);// the first request is to skip session id + + + $X74d424h9xleHSS = !preg_match($gk7xyukmlMb,$O3mTecPWsZVPj45u['code']); + + + + if($X74d424h9xleHSS) + + { + + $X74d424h9xleHSS = ''; + + foreach($O3mTecPWsZVPj45u['headers'] as $k=>$v) + + $X74d424h9xleHSS .= $k.': '.$v.'
    '; + + return array( + + 'errmsg'=>'There was an error while retrieving the URL specified: '.$this->iK6zN3FNMZ.''. + + ($O3mTecPWsZVPj45u['errormsg']?'
    Error message: '.$O3mTecPWsZVPj45u['errormsg']:''). + + '
    HTTP Code:
    '.$O3mTecPWsZVPj45u['protoline']. + + '
    HTTP headers:
    '.$X74d424h9xleHSS. + + '
    HTTP output:
    '.$O3mTecPWsZVPj45u['content'] + + , + + ); + + } + + $this->iK6zN3FNMZ = $O3mTecPWsZVPj45u['last_url']; + + $urls_completed = array(); + + $urls_ext = array(); + + $urls_404 = array(); + + $this->OdZB8ypqkYH0RE87bq = $bcUHiUvk1__NNu9qID['scheme'].'://'.$bcUHiUvk1__NNu9qID['host'].((!$bcUHiUvk1__NNu9qID['port'] || ($bcUHiUvk1__NNu9qID['port']=='80'))?'':(':'.$bcUHiUvk1__NNu9qID['port'])); + + $this->pn = $this->tsize = $retrno = $D8EOhUUDgGFotoZ8 = $gOJkENRoH = $this->fetch_no = 0; + + $this->Niq61B3f5T = YePgHxjTNXTAB($this->OdZB8ypqkYH0RE87bq.'/', A4sNJQoe6O47I_YC4($bcUHiUvk1__NNu9qID['path'])); + + $MMwXOhanJ6q = parse_url($this->Niq61B3f5T); + + $this->T_IVB6tYAThxWS = preg_replace('#^.+://[^/]+#', '', $this->Niq61B3f5T); + + $fdata2 = $K5kCC5JoHjozL->fetch($this->iK6zN3FNMZ,0,true,true); + + $Ur6IsVd9ao9Ycn = str_replace($this->Niq61B3f5T,'',$this->iK6zN3FNMZ); + + $urls_list_full = array($Ur6IsVd9ao9Ycn=>1); + + if(!$Ur6IsVd9ao9Ycn)$Ur6IsVd9ao9Ycn=''; + + $urls_list = array($Ur6IsVd9ao9Ycn=>1); + + $urls_list2 = $urls_list_skipped = array(); + + $this->xNVJOXeK2sW = array(); + + $this->links_level = 0; + + $eYgPj3ZHK0T12hAy = $ref_links = $ref_links2 = $ref_links_list = array(); + + $NgBWwllTme = 0; + + + + $Ho3EyQEy5sso9sRWd = $this->qWPODI2gyt3Aa; + + if(!$grab_parameters['xs_progupdate'])$grab_parameters['xs_progupdate'] = 20; + + $this->Nt_1IROZP14owm4DAeH = array(); + + $this->botmatch_allow = array(); + + if(isset($grab_parameters['xs_robotstxt']) && $grab_parameters['xs_robotstxt']) + + { + + $YlUEXWvoXpwz6PaGySd = $K5kCC5JoHjozL->fetch($this->OdZB8ypqkYH0RE87bq.'/robots.txt'); + + if($this->OdZB8ypqkYH0RE87bq.'/' != $this->Niq61B3f5T) + + { + + $GRmeg_68ZvfdvyJw8v = $K5kCC5JoHjozL->fetch($this->Niq61B3f5T.'robots.txt'); + + $YlUEXWvoXpwz6PaGySd['content'] .= "\n".$GRmeg_68ZvfdvyJw8v['content']; + + } + + $ra=preg_split('#user-agent:\s*#im',$YlUEXWvoXpwz6PaGySd['content']); + + $NBx_26Cujx04fN=$KPnlaCP0s89m=array(); + + for($i=1;$iNt_1IROZP14owm4DAeH[]=implode('|', array_slice($NBx_26Cujx04fN, $i,200)); + + for($i=0;$ibotmatch_allow[]=implode('|', array_slice($KPnlaCP0s89m, $i,200)); + + } + + if($grab_parameters['xs_inc_ajax']) + + $grab_parameters['xs_proto_skip'] = str_replace( + + '\#', '\#(?:[^\!]|$)', $grab_parameters['xs_proto_skip']); + + $this->HDxSUg0eWtUQjt = $grab_parameters['xs_exc_skip']!='\\.()'; + + $this->kNSV2dId7YB = $grab_parameters['xs_inc_skip']!='\\.()'; + + $grab_parameters['xs_inc_skip'] .= '(?:$|\?)'; + + $grab_parameters['xs_exc_skip'] .= '(?:$|\?)'; + + if($grab_parameters['xs_debug']) { + + $_GET['ddbg']=1; + + PMVKiWGsLbTpXo0qagQ(); + + } + + $paeh3sXfU = 0; + + $runstate = array(); + + $url_ind = 0; + + $cnu = 1; + + $pf = tMsFwxcfs9YfeVoHZkr(ebJGVa__YE.wLyh1d0ilMb,'w');fclose($pf); + + $Qw4OhMRiQXE9Pvp0y22 = false; + + if($this->lT0Vs3VxjBxAH3['resume']!=''){ + + $AngxaIfOJ = @IcPgk0YCJ(RWenvmRCuyBW(ebJGVa__YE.smWzxPC1LKDbUte, true)); + + if($AngxaIfOJ) + + { + + $Qw4OhMRiQXE9Pvp0y22 = true; + + echo 'Resuming the last session (last updated: '.date('Y-m-d H:i:s',$AngxaIfOJ['time']).')'."\n"; + + extract($AngxaIfOJ); + + foreach($AngxaIfOJ as $k=>$v){ + + if(isset($this->$k))$this->$k=$v; + + } + + $this->L3KcxI6fDP-=$this->ctime; + + $paeh3sXfU = $this->ctime; + + unset($AngxaIfOJ); + + } + + } + + $CycjTbE1bsdEES4EbPq = 0; + + if(!$Qw4OhMRiQXE9Pvp0y22){ + + if($grab_parameters['xs_moreurls']){ + + $this->mu = preg_split('#[\r\n]+#', $grab_parameters['xs_moreurls']); + + foreach($this->mu as $nO36g2p2q_KYnh7qxVo){ + + + + $cCqeu6KEd4LFk = $this->XQa0UewN3f($nO36g2p2q_KYnh7qxVo, $this->F4IXRYNqGySShUMjj); + + + $urls_list[$nO36g2p2q_KYnh7qxVo]++; + + } + + } + + if($grab_parameters['xs_prev_sm_base']){ + + if($sm_base = @RWenvmRCuyBW(ebJGVa__YE.'sm_base.db',true)){ + + $sm_base = @unserialize($sm_base); + + } + + if(is_array($sm_base) + + && ($grab_parameters['xs_prev_sm_base_min']$_e) + + $urls_list[$_u]++; + + } + + else + + $sm_base = array(); + + } + + $CycjTbE1bsdEES4EbPq = count($urls_list); + + $urls_list_full = $urls_list; + + $cnu = count($urls_list); + + } + + $CUx3ZI0WzO = explode('|', $grab_parameters['xs_force_inc']); + + $fge8exEbRfdVJOzP8V_ = $bT1vStOWyX = array(); + + $this->VP8vAJd3fs3x1Ygo = count($urls_completed); + + $this->ApWk9cNV4bVZkvPX = count($urls_list2); + + sleep(1); @jgYSLBDPtmpAo(ebJGVa__YE.wLyh1d0ilMb); + + + $this->ffpknLH3lruh(); + + + if($urls_list) + + do { + + YHHPuGcJpxLDUfERty('pre',true); + + YHHPuGcJpxLDUfERty('pre1'); + + if($fge8exEbRfdVJOzP8V_) { + + $_ul = array_shift($fge8exEbRfdVJOzP8V_); + + }else + + $_ul = each($urls_list); + + list($this->F4IXRYNqGySShUMjj, $DUZrQcBoQ) = $_ul; + + $b5bOuoZcPCglzF = ($DUZrQcBoQ>0 && $DUZrQcBoQ<1) ? $DUZrQcBoQ : 0; + + $url_ind++; + + z_fhGrViQaOeql9("\n[ $url_ind - $this->F4IXRYNqGySShUMjj, $DUZrQcBoQ] \n"); + + unset($urls_list[$this->F4IXRYNqGySShUMjj]); + + $KDdCtJPGUBu9Wq = yiI3GJqLr5Z($this->F4IXRYNqGySShUMjj); + + $XSgHgDDEhTbwopK_PT = false; + + $LyZYub5sAF58GG = ''; + + YHHPuGcJpxLDUfERty('pre1',true); + + YHHPuGcJpxLDUfERty('pre2a'); + + $O3mTecPWsZVPj45u = array(); + + $cn = ''; + + $this->vBIKyMEhBONsP = $_fex = $this->HnabdBaTOZ($this->F4IXRYNqGySShUMjj); + + extract($_fex); + + + + YHHPuGcJpxLDUfERty('pre2a',true); + + YHHPuGcJpxLDUfERty('pre2b'); + + if(!$f && ($this->VP8vAJd3fs3x1Ygo>0) && ($mXVOQkdQzwnNzlTzU = $sm_base[$this->F4IXRYNqGySShUMjj])){ + + $f2 = true; + + } + + + YHHPuGcJpxLDUfERty('pre2b',true); +if($fdata2 && strstr($fdata2['content'],'header'))$f2 = true; + + do{ + + $sHQF4BoAenBu9haawqS = count($urls_list) + $this->ApWk9cNV4bVZkvPX + $this->VP8vAJd3fs3x1Ygo; + + $f3 = $CUx3ZI0WzO[2] && ( + + ($Ho3EyQEy5sso9sRWd*$CUx3ZI0WzO[2]+1000)< + + ($M_05edZvR-$url_ind-$CycjTbE1bsdEES4EbPq)); + + if(!$f && !$f2) + + { + + + $E45nP_d0Gh = ($CUx3ZI0WzO[1] && + + ( + + (($this->ctime>$CUx3ZI0WzO[0]) && ($this->pn>$this->qWPODI2gyt3Aa*$CUx3ZI0WzO[1])) + + || $f3)); + + $i64_RzaxP7PMd7s = ($CUx3ZI0WzO[3] && $this->qWPODI2gyt3Aa && (($sHQF4BoAenBu9haawqS>$this->qWPODI2gyt3Aa*$CUx3ZI0WzO[3]))); + + if($CUx3ZI0WzO[3] && $this->qWPODI2gyt3Aa && (($this->pn>$this->qWPODI2gyt3Aa*$CUx3ZI0WzO[3]))){ + + $urls_list = $urls_list2 = array(); + + $this->ApWk9cNV4bVZkvPX = 0; + + $cnu = 0; + + } + + if($RlO1HaAgQ<=0 || $this->links_level<$RlO1HaAgQ) + + { + + YHHPuGcJpxLDUfERty('extract'); + + $nBkwKlofG1 = microtime(true); + + $Pj81O2W_d6lwy = YePgHxjTNXTAB($this->Niq61B3f5T, $this->F4IXRYNqGySShUMjj); + + if(e6p6oz8D73L8('xs_http_parallel')){ + + if(!$fge8exEbRfdVJOzP8V_ && !isset($K5kCC5JoHjozL->mPLdZvfSTzaO[$Pj81O2W_d6lwy])){ + + $fge8exEbRfdVJOzP8V_ = array(); + + $bT1vStOWyX = array($Pj81O2W_d6lwy); + + $_par = e6p6oz8D73L8('xs_http_parallel_num', 10); + + for($i=0;($i<$_par*5)&&(count($bT1vStOWyX)<$_par);$i++) + + if($_ul = each($urls_list)) { + + $fge8exEbRfdVJOzP8V_[] = $_ul; + + $_fex2 = $this->HnabdBaTOZ($_ul[0]); + + if(!$_fex2['f'] && !$_fex2['f2']){ + + $_u1 = YePgHxjTNXTAB($this->Niq61B3f5T, $_ul[0]); + + if(!isset($sm_base[$_u1])){ + + $bT1vStOWyX[] = $_u1; + + } + + } + + } + + $K5kCC5JoHjozL->t7RRTKqTzMKk($bT1vStOWyX); + + } + + } + + + + z_fhGrViQaOeql9("

    { $Pj81O2W_d6lwy }

    \n"); + + $lv3sjQRQ1U1=0; + + $D8EOhUUDgGFotoZ8++; + + do { + + $O3mTecPWsZVPj45u = $K5kCC5JoHjozL->fetch($Pj81O2W_d6lwy, 0, 0); + + $this->ffpknLH3lruh(); + + $_to = $O3mTecPWsZVPj45u['flags']['socket_timeout']; + + if($_to && ($MMwXOhanJ6q['host']!=$O3mTecPWsZVPj45u['purl']['host'])){ + + $O3mTecPWsZVPj45u['flags']['error'] = 'Host doesn\'t match'; + + } + + $_ic = intval($O3mTecPWsZVPj45u['code']); + + $jqShMclc87KzIClgU = preg_match($kYhgTL6xjtaMnUKyj,$_ic); + + $vPMSF5pieFsrixtq8t = ($_ic == 403); + + if($gk7xyukmlMb && preg_match($gk7xyukmlMb,$_ic)){ + + $jqShMclc87KzIClgU = $vPMSF5pieFsrixtq8t = false; + + } + + $ICfKWr5QeaWZ6O = (($_ic == 301)||($_ic==302)) && ($Pj81O2W_d6lwy == $O3mTecPWsZVPj45u['last_url']); + + if( !$O3mTecPWsZVPj45u['flags']['error'] && + + (($jqShMclc87KzIClgU || $vPMSF5pieFsrixtq8t || $ICfKWr5QeaWZ6O) || !$O3mTecPWsZVPj45u['code'] || $_to) + + ) + + { + + $lv3sjQRQ1U1++; + + $_sl = $grab_parameters['xs_delay_ms']?$grab_parameters['xs_delay_ms']:1; + + if($O3mTecPWsZVPj45u['headers'] && ($_csl = $O3mTecPWsZVPj45u['headers']['retry-after'])) + + $_sl = max($_sl, $_csl + ($lv3sjQRQ1U1+1)*$_sl); + + + if(($_to) && $grab_parameters['xs_timeout_break']){ + + z_fhGrViQaOeql9("

    # TIMEOUT - $_to #

    \n"); + + if($lv3sjQRQ1U1==3){ + + + if(strstr($_to,'read') ){ + + z_fhGrViQaOeql9("

    read200 break?

    \n"); + + break ; + + } + + if($gOJkENRoH++>5) { + + $hFdFC9FutftfbQcPCF = "Too many timeouts detected"; + + break 2; + + } + + z_fhGrViQaOeql9("

    # MULTI TIMEOUT - BREAK #

    \n"); + + $_sl = 60; + + $lv3sjQRQ1U1 = 0; + + } + + } + + z_fhGrViQaOeql9("

    # RETRY - ".$O3mTecPWsZVPj45u['code']." - ".(intval($O3mTecPWsZVPj45u['code']))." - ".$O3mTecPWsZVPj45u['flags']['error']."# zZz $_sl

    \n"); + + sleep($_sl); + + } + + else + + break; + + }while($lv3sjQRQ1U1<3); + + $this->fetch_no++; + + YHHPuGcJpxLDUfERty('extract', true); + + YHHPuGcJpxLDUfERty('analyze'); + + $this->hOuc4HLzwywe = microtime(true)-$nBkwKlofG1; + + $this->nettime += $this->hOuc4HLzwywe; + + + z_fhGrViQaOeql9("
    \n[[[ ".$O3mTecPWsZVPj45u['code']." ]]] - ".number_format($this->hOuc4HLzwywe,2)."s (".number_format($K5kCC5JoHjozL->wR70CK76khtA4O6VZ4I,2).' + '.number_format($K5kCC5JoHjozL->HQZ0___sxrUQHbO4gb,2).")\n".var_export($O3mTecPWsZVPj45u['headers'],1)); + + $QzwMd7YvjRlwM = is_array($O3mTecPWsZVPj45u['headers']) ? strtolower($O3mTecPWsZVPj45u['headers']['content-type']) : ''; + + $Sd_5PqYOkY = strstr($QzwMd7YvjRlwM,'text/html') || strstr($QzwMd7YvjRlwM,'/xhtml') || !$QzwMd7YvjRlwM; + + + if((strstr($QzwMd7YvjRlwM,'application/') && strstr($QzwMd7YvjRlwM,'pdf')) + + ||strstr($QzwMd7YvjRlwM,'/xml') + + ||strstr($QzwMd7YvjRlwM,'text/plain') + + ) + + { + + $O3mTecPWsZVPj45u['content'] = ''; + + $Sd_5PqYOkY = true; + + } + + $mB38DEhdYf = ($grab_parameters['xs_parse_swf'] && strstr($QzwMd7YvjRlwM, 'shockwave-flash')); + + $K8zTIUVnwPDUDC = ($grab_parameters['xs_parse_js'] && strstr($QzwMd7YvjRlwM, 'javascript')); + + if($QzwMd7YvjRlwM && !$Sd_5PqYOkY && !$mB38DEhdYf && !$K8zTIUVnwPDUDC){ + + if(!$E45nP_d0Gh){ + + $LyZYub5sAF58GG = $QzwMd7YvjRlwM; + + continue; + + } + + } + + $cKCGec1Tw = array(); + + + if($O3mTecPWsZVPj45u['code']==404 + + || ($grab_parameters['xs_force_404'] + + && preg_match('#'.implode('|',preg_split('#\s+#',$grab_parameters['xs_force_404'])).'#', $this->F4IXRYNqGySShUMjj) + + ) + + ){ + + if($this->links_level>0) + + if(!$grab_parameters['xs_chlog_list_max'] || + + count($urls_404) < $grab_parameters['xs_chlog_list_max']) { + + $V8LkdUr76kWKRNwEM8b = $ref_links2[$this->F4IXRYNqGySShUMjj]; + + if($V8LkdUr76kWKRNwEM8b && isset($this->xNVJOXeK2sW[$V8LkdUr76kWKRNwEM8b[0]]) + + && isset($ref_links_list[$V8LkdUr76kWKRNwEM8b[0]]) + + ){ + + $V8LkdUr76kWKRNwEM8b = array_merge($V8LkdUr76kWKRNwEM8b,$ref_links_list[$V8LkdUr76kWKRNwEM8b[0]]); + + } + + $urls_404[]=array($this->F4IXRYNqGySShUMjj,$V8LkdUr76kWKRNwEM8b); + + } + + } + + + $cn = $O3mTecPWsZVPj45u['content']; +z_fhGrViQaOeql9("\n\n
    \n\n$cn\n\n
    \n\n",4); + + $this->tsize+=strlen($cn); + + if($aJAUx_d6Kz = preg_replace('#)#is', '',$cn)) + + $cn = $aJAUx_d6Kz; + + preg_match('#]*?href=[\'"](.*?)[\'"]#is',$cn,$bm); + + if(isset($bm[1])&&$bm[1]){ + + if($bcUHiUvk1__NNu9qID['scheme'] && substr($bm[1], 0, 2) == '//') + + $bm[1] = $bcUHiUvk1__NNu9qID['scheme'].':'.$bm[1]; + + $this->KrTMgWoxdnmEih0271 = A4sNJQoe6O47I_YC4($bm[1].(preg_match('#//.*/#',$bm[1])?'-':'/-')); + + } + + else + + $this->KrTMgWoxdnmEih0271 = A4sNJQoe6O47I_YC4(strstr($this->F4IXRYNqGySShUMjj,'://') ? $this->F4IXRYNqGySShUMjj : $this->Niq61B3f5T . $this->F4IXRYNqGySShUMjj); + + if($grab_parameters['xs_canonical']) + + if(($Pj81O2W_d6lwy == $O3mTecPWsZVPj45u['last_url']) + + && + + ( + + preg_match('#]*rel=[\'"]canonical[\'"][^>]*\shref=[\'"]([^>]*?)[\'"]#is', $cn, $MiqXpOB9QIO9l) || + + preg_match('#]*\shref=[\'"]([^>]*?)[\'"][^>]*rel=[\'"]canonical[\'"]#is', $cn, $MiqXpOB9QIO9l)) + + ){ + + $O3mTecPWsZVPj45u['last_url'] = trim($MiqXpOB9QIO9l[1]); + + } + + if($O3mTecPWsZVPj45u['last_url']){ + + $cCqeu6KEd4LFk = $this->XQa0UewN3f($O3mTecPWsZVPj45u['last_url'], $this->F4IXRYNqGySShUMjj); + + if($cCqeu6KEd4LFk == 1){ + + $LyZYub5sAF58GG = 'lu (ext) - '.$O3mTecPWsZVPj45u['last_url']; + + if($O3mTecPWsZVPj45u['last_url'] != $Pj81O2W_d6lwy) { + + + continue; + + } + + } + + } + + $lOLd5T3bchft8O9 = preg_replace('#^.*?'.preg_quote($this->Niq61B3f5T,'#').'#','',$O3mTecPWsZVPj45u['last_url']); + + if(($Pj81O2W_d6lwy != $O3mTecPWsZVPj45u['last_url']))// && ($Pj81O2W_d6lwy != $O3mTecPWsZVPj45u['last_url'].'/')) + + { + + $this->xNVJOXeK2sW[$this->F4IXRYNqGySShUMjj]=$O3mTecPWsZVPj45u['last_url']; $io=$this->F4IXRYNqGySShUMjj; + + if(strlen($lOLd5T3bchft8O9) <= 2048) + + if(!isset($urls_list_full[$lOLd5T3bchft8O9])) { + + $urls_list2[$lOLd5T3bchft8O9]++; + + if(count($ref_links[$lOLd5T3bchft8O9])F4IXRYNqGySShUMjj; + + if( + + $grab_parameters['xs_ref_list_store'] && + + ($_rlmax = $grab_parameters['xs_ref_list_max']) + + ){ + + if( + + (isset($ref_links_list[$lOLd5T3bchft8O9]) + + || count($ref_links_list)<$_rlmax) + + && + + (count($ref_links_list[$lOLd5T3bchft8O9])F4IXRYNqGySShUMjj, $ref_links_list[$lOLd5T3bchft8O9])) + + $ref_links_list[$lOLd5T3bchft8O9][] = $this->F4IXRYNqGySShUMjj; + + } + + } + + } + + $LyZYub5sAF58GG = 'lu - '.$O3mTecPWsZVPj45u['last_url']; + + if(!$E45nP_d0Gh)continue; + + } + + if($gk7xyukmlMb && !preg_match($gk7xyukmlMb,$O3mTecPWsZVPj45u['code'])){ + + $LyZYub5sAF58GG = $O3mTecPWsZVPj45u['code']; + + continue; + + } + + $retrno++; + + if($E45nP_d0Gh||$i64_RzaxP7PMd7s) { + + + $Sd_5PqYOkY = false; + + } + + YHHPuGcJpxLDUfERty('analyze',true); + + if($mB38DEhdYf) + + { + + include_once Il2qN32A6EeND.'class.pfile.inc.php'; + + $am = new SWFParser(); + + $am->sEHr9E0d1xL1nk($cn); + + $SXMDOThfSvBx_D = $am->sMuf2pf0iKaQ(); + + }else + + if($Sd_5PqYOkY || $K8zTIUVnwPDUDC) + + { + + YHHPuGcJpxLDUfERty('parse'); + + if($K8zTIUVnwPDUDC) { + + $LyZYub5sAF58GG = 'js'; + + $f = true; // Do not index + + preg_match_all('#(?:add|menu)item\s*\([^\)]*?["\']((?:\.+\/|http).*?)["\)\']#is', $cn, $nexwy0P_rGvjchKEd); + + $cKCGec1Tw = $nexwy0P_rGvjchKEd[1]; + + }else { + + $cKCGec1Tw = $this->J288sfitpupJnEcw3($cn); + + } + + } + + $cKCGec1Tw = array_unique($cKCGec1Tw); + + + $nn = $nt = 0; + + reset($cKCGec1Tw); + + if(isset($grab_parameters['xs_robotstxt']) && $grab_parameters['xs_robotstxt']) + + if(preg_match('#]*?charset=([^">]*)"#is',$cn, $tqAifGeogXJRviudvJ1)) + + $runstate['charset'] = $tqAifGeogXJRviudvJ1[1]; + + } + + YHHPuGcJpxLDUfERty('parse', true); + + YHHPuGcJpxLDUfERty('llist'); + + foreach($cKCGec1Tw as $i=>$ll) + + if($ll) + + { + + $a = $sa = trim($ll); + + $a = str_replace(':',':',$a); + + if($grab_parameters['xs_proto_skip'] && + + (preg_match('#^'.$grab_parameters['xs_proto_skip'].'#i',$a)|| + + ($this->HDxSUg0eWtUQjt && preg_match('#'.$grab_parameters['xs_exc_skip'].'#i',$a))|| + + preg_match('#^'.$grab_parameters['xs_proto_skip'].'#i',function_exists('html_entity_decode')?html_entity_decode($a):$a) + + )) + + continue; + + + if(strlen($a) > 4096) continue; + + $cCqeu6KEd4LFk = $this->XQa0UewN3f($a, $this->F4IXRYNqGySShUMjj); + + if($cCqeu6KEd4LFk == 1) + + { + + if($grab_parameters['xs_extlinks'] && + + (!$grab_parameters['xs_extlinks_excl'] || !preg_match('#'.$this->dYfVkEYUS1map3XFd8($grab_parameters['xs_extlinks_excl']).'#',$a)) && + + (!$grab_parameters['xs_ext_max'] || (count($urls_ext)<$grab_parameters['xs_ext_max'])) + + ) + + { + + if(!$urls_ext[$a] && + + (!$grab_parameters['xs_ext_skip'] || + + !preg_match('#'.$grab_parameters['xs_ext_skip'].'#',$a) + + ) + + ) + + $urls_ext[$a] = $Pj81O2W_d6lwy; + + } + + continue; + + } + + $lOLd5T3bchft8O9 = $cCqeu6KEd4LFk ? $a : substr($a,strlen($this->Niq61B3f5T)); + + $lOLd5T3bchft8O9 = str_replace(' ', '%20', $lOLd5T3bchft8O9); + + if($urls_list_full[$lOLd5T3bchft8O9] || ($lOLd5T3bchft8O9 == $this->F4IXRYNqGySShUMjj)) + + continue; + + if($grab_parameters['xs_exclude_check']) + + { + + $_f=$_f2=false; + + $_f=$this->GjJcq8T1P9&&preg_match('#('.$this->GjJcq8T1P9.')#',$lOLd5T3bchft8O9); + + $_f = $_f || $this->VFZlf5sNkzX7GF7k($this->T_IVB6tYAThxWS.$lOLd5T3bchft8O9); + + if($_f)continue; + + } + + z_fhGrViQaOeql9("[$lOLd5T3bchft8O9]
    \n",2);//exit; + + $urls_list2[$lOLd5T3bchft8O9]++; + + if( + + $grab_parameters['xs_ref_list_store'] && + + ($_rlmax = $grab_parameters['xs_ref_list_max']) + + ){ + + if( + + (isset($ref_links_list[$lOLd5T3bchft8O9]) + + || count($ref_links_list)<$_rlmax) + + && + + (count($ref_links_list[$lOLd5T3bchft8O9])F4IXRYNqGySShUMjj, $ref_links_list[$lOLd5T3bchft8O9])) + + $ref_links_list[$lOLd5T3bchft8O9][] = $this->F4IXRYNqGySShUMjj; + + } + + } + + if($grab_parameters['xs_maxref'] && count($ref_links[$lOLd5T3bchft8O9])<$grab_parameters['xs_maxref']) + + $ref_links[$lOLd5T3bchft8O9][] = $this->F4IXRYNqGySShUMjj; + + $nt++; + + } + + unset($cKCGec1Tw); + + YHHPuGcJpxLDUfERty('llist', true); + + } + + } + + + $this->ApWk9cNV4bVZkvPX = count($urls_list2); + + YHHPuGcJpxLDUfERty('analyze', true); + + YHHPuGcJpxLDUfERty('post'); + + if(!$f){ + + + $f = $f || !$this->hVgV5J75NEESyCQgUY('xs_incl_only', $this->Niq61B3f5T.$this->F4IXRYNqGySShUMjj, true); + + } + + if($_fex['f3']) { + + $f = true; + + } + + if(!$f) + + if(isset($grab_parameters['xs_robotstxt']) && $grab_parameters['xs_robotstxt']) + + { + + $f = $f||preg_match('# preg_replace('#//+$#','/', + + preg_replace('#^([^/\:\?]/)/+#','\\1', + + (preg_match('#^\w+://#',$this->F4IXRYNqGySShUMjj) ? $this->F4IXRYNqGySShUMjj : $this->Niq61B3f5T . $this->F4IXRYNqGySShUMjj) + + )) + + ); + + if($grab_parameters['xs_makehtml']||$grab_parameters['xs_makeror']||$grab_parameters['xs_rssinfo']) + + { + + preg_match('#([^<]*?)#is', $O3mTecPWsZVPj45u['content'], $D3AGbIACouD10); + + $mXVOQkdQzwnNzlTzU['t'] = strip_tags($D3AGbIACouD10[1]); + + } + + if($grab_parameters['xs_metadesc']) + + { + + preg_match('#]*(?:http-equiv|name)\s*=\s*"?description[^>]*content\s*=\s*["]?([^>\"]*)#is', $cn, $ubgR29rFB); + + if($ubgR29rFB[1]) + + $mXVOQkdQzwnNzlTzU['d'] = $ubgR29rFB[1]; + + } + + if($grab_parameters['xs_makeror']||$grab_parameters['xs_autopriority']) + + $mXVOQkdQzwnNzlTzU['o'] = max(0,$this->links_level); + + if($b5bOuoZcPCglzF) + + $mXVOQkdQzwnNzlTzU['p'] = $b5bOuoZcPCglzF; + + if(preg_match('#]*(?:http-equiv|name)\s*=\s*"?last-modified[^>]*content\s*=\s*["]?([^>\"]*)#is', $cn, $ubgR29rFB)){ + + $mXVOQkdQzwnNzlTzU['clm'] = str_replace('@',' ',$ubgR29rFB[1]); + + } + + if(preg_match('#]*(?:http-equiv|name)\s*=\s*"?changefreq[^>]*content\s*=\s*["]?([^>\"]*)#is', $cn, $ubgR29rFB)){ + + $mXVOQkdQzwnNzlTzU['f'] = $ubgR29rFB[1]; + + }else + + if(preg_match('#]*(?:http-equiv|name)\s*=\s*"?revisit-after[^>]*content\s*=\s*["]?([^>\"]*)#is', $cn, $ubgR29rFB)){ + + if(preg_match('#(\d+)\s*hour#',$ubgR29rFB[1])){ + + $mXVOQkdQzwnNzlTzU['f'] = 'hourly'; + + } + + if(preg_match('#(\d+)\s*month#',$ubgR29rFB[1])){ + + $mXVOQkdQzwnNzlTzU['f'] = 'monthly'; + + } + + if(preg_match('#(\d+)\s*day#',$ubgR29rFB[1], $ubgR29rFB)){ + + $d = $ubgR29rFB[1]+0; + + if($d<4)$mXVOQkdQzwnNzlTzU['f'] = 'daily'; + + else + + if($d<22)$mXVOQkdQzwnNzlTzU['f'] = 'weekly'; + + else + + $mXVOQkdQzwnNzlTzU['f'] = 'monthly'; + + } + + } + + if(preg_match('#'.$ZR1vtYkW3IIT6ji.'#',$this->Niq61B3f5T.$this->F4IXRYNqGySShUMjj,$fjOiR1rimG)) + + { + + for($_i=0;$_i]*rel\s*=\s*"alternate"[^>]*>#is', $cn, $o5dbZtmDCSktjDlJt3, PREG_SET_ORDER) + + ){ + + $_la = array(); + + foreach($o5dbZtmDCSktjDlJt3 as $_alt1){ + + if(preg_match('#\s(hreflang|media)\s*=\s*"([^">]*?)"[^>]*>#is', $_alt1[0], $_alt) + + && preg_match('#\s*href\s*=\s*[\'"]([^>]*?)[\'"]#is', $_alt1[0], $_hm) + + ) + + $_la[] = array('t' => $_alt[1], 'l' => $_alt[2], 'u' => $_hm[1]); + + } + + $mXVOQkdQzwnNzlTzU['hl'] = $_la; + + } + + } + + if($grab_parameters['xs_lastmod_notparsed'] && $f2) + + { + + $O3mTecPWsZVPj45u = $K5kCC5JoHjozL->fetch($Pj81O2W_d6lwy, 0, 1, false, "", array('req'=>'HEAD')); + + } + + if(!$mXVOQkdQzwnNzlTzU['lm'] && isset($O3mTecPWsZVPj45u['headers']['last-modified'])) + + $mXVOQkdQzwnNzlTzU['lm'] = $O3mTecPWsZVPj45u['headers']['last-modified']; + + } + + YHHPuGcJpxLDUfERty('post', true); + + YHHPuGcJpxLDUfERty('post-save1'); + + z_fhGrViQaOeql9("\n((include ".$mXVOQkdQzwnNzlTzU['link']."))
    \n"); + + $XSgHgDDEhTbwopK_PT = true; + + if($grab_parameters['xs_memsave']) + + { + + oL4Wd5vimhWp8DF0q($KDdCtJPGUBu9Wq, $mXVOQkdQzwnNzlTzU); + + $urls_completed[] = $KDdCtJPGUBu9Wq; + + }else + + $urls_completed[] = serialize($mXVOQkdQzwnNzlTzU); + + $this->VP8vAJd3fs3x1Ygo++; + + + YHHPuGcJpxLDUfERty('post-save1',true); + + YHHPuGcJpxLDUfERty('post-save2'); + + if($grab_parameters['xs_prev_sm_base'] + + && $b7bWC1DiTPmt8mWhN && + + preg_match('#('.$b7bWC1DiTPmt8mWhN.')#',$this->F4IXRYNqGySShUMjj)){ + + $sm_base[$this->F4IXRYNqGySShUMjj] = $mXVOQkdQzwnNzlTzU; + + } + + $Ho3EyQEy5sso9sRWd = $this->qWPODI2gyt3Aa - $this->VP8vAJd3fs3x1Ygo; + + YHHPuGcJpxLDUfERty('post-save2',true); + + + } + + }while(false);// zerowhile + + YHHPuGcJpxLDUfERty('post-progress1'); + + if($url_ind>=$cnu) + + { + + unset($urls_list); + + $url_ind = 0; + + $urls_list = $urls_list2; + + + $urls_list_full += $urls_list; + + $cnu = count($urls_list); + + unset($ref_links2); + + $ref_links2 = $ref_links; + + unset($ref_links); unset($urls_list2); + + $ref_links = array(); + + $urls_list2 = array(); + + $this->links_level++; + + z_fhGrViQaOeql9("\n
    NEXT LEVEL:$this->links_level
    \n"); + + } + + if(!$XSgHgDDEhTbwopK_PT){ + + + z_fhGrViQaOeql9("\n({skipped ".$this->F4IXRYNqGySShUMjj." - $LyZYub5sAF58GG})
    \n"); + + if(!$grab_parameters['xs_chlog_list_max'] || + + count($urls_list_skipped) < $grab_parameters['xs_chlog_list_max']) { + + $urls_list_skipped[$this->F4IXRYNqGySShUMjj] = $LyZYub5sAF58GG; + + } + + } + + YHHPuGcJpxLDUfERty('post-progress1',true); + + YHHPuGcJpxLDUfERty('post-progress2'); + + $this->pn++; + + s_kA5FLQ9p4i(); + + $this->pl=min($cnu-$url_ind,$Ho3EyQEy5sso9sRWd); + + $uIZDnQOguALfQ = ($this->VP8vAJd3fs3x1Ygo>=$this->qWPODI2gyt3Aa) || ($url_ind>=$cnu); + + if(!$hFdFC9FutftfbQcPCF) { + + + if($hFdFC9FutftfbQcPCF = N_Fm0hhD3owWta()){ + + if(!@jgYSLBDPtmpAo($hFdFC9FutftfbQcPCF)) + + $hFdFC9FutftfbQcPCF=0; + + } + + } + + YHHPuGcJpxLDUfERty('post-progress2',true); + + YHHPuGcJpxLDUfERty('post-progress3'); + + $progpar = $this->ffpknLH3lruh(false, $uIZDnQOguALfQ||$hFdFC9FutftfbQcPCF); + + YHHPuGcJpxLDUfERty('post-progress3',true); + + YHHPuGcJpxLDUfERty('post-progress4'); + + if($grab_parameters['xs_exec_time'] && + + ((time()-$u3Aj3kpP8f7NX) > $grab_parameters['xs_exec_time']) ){ + + $hFdFC9FutftfbQcPCF = 'Time limit exceeded - '.($grab_parameters['xs_exec_time']).' - '.(time()-$u3Aj3kpP8f7NX); + + } + + if($grab_parameters['xs_savestate_time']>0 && + + ( + + ($this->ctime-$paeh3sXfU>$grab_parameters['xs_savestate_time']) + + || $uIZDnQOguALfQ + + || $hFdFC9FutftfbQcPCF + + ) + + ) + + { + + $paeh3sXfU = $this->ctime; + + z_fhGrViQaOeql9("(saving dump)
    \n"); + + $AngxaIfOJ = array(); + + $ugr2aG5lxR = array( + + 'url_ind', + + 'urls_list','urls_list2','cnu', + + 'ref_links','ref_links2','ref_links_list', + + 'urls_list_full','urls_completed', + + 'urls_404', + + 'nt','tsize','pn','links_level','ctime', 'urls_ext','fetch_no', + + 'starttime', 'retrno', 'nettime', 'urls_list_skipped', + + 'imlist','imlist2', 'progpar', 'runstate', 'sm_base' + + ); + + foreach($ugr2aG5lxR as $k){ + + $AngxaIfOJ[$k] = isset($this->$k) ? $this->$k : $$k; + + } + + $AngxaIfOJ['time']=time(); + + $k88k5WVVH7HOa=G8ByTBG0gz4G9($AngxaIfOJ); + + QNBZB8U2gUbUbMO(smWzxPC1LKDbUte,$k88k5WVVH7HOa,ebJGVa__YE,true); + + unset($AngxaIfOJ); + + unset($k88k5WVVH7HOa); + + } + + if($grab_parameters['xs_delay_req'] && $grab_parameters['xs_delay_ms'] && + + (($D8EOhUUDgGFotoZ8%$grab_parameters['xs_delay_req'])==0)) + + { + + sleep(intval($grab_parameters['xs_delay_ms'])); + + } + + YHHPuGcJpxLDUfERty('post-progress4', true); + + }while(!$uIZDnQOguALfQ && !$hFdFC9FutftfbQcPCF); + + z_fhGrViQaOeql9("\n\n

    Crawling completed
    \n"); + + if($_GET['ddbgexit']){ + + echo '

    Dbg exit

    '; + + echo $K5kCC5JoHjozL->ZwgAtu5BO_NYpaRWr.' / '.$K5kCC5JoHjozL->nettime.'
    '; + + echo fiJIJjF_yojaqa().'
    '; + + exit; + + } + + return array( + + 'u404'=>$urls_404, + + 'ref_links_list'=>$ref_links_list, + + 'starttime'=>$starttime, + + 'topmu' => $bsdObbWFYcM20JyA, + + 'ctime'=>$this->ctime, + + 'tsize'=>$this->tsize, + + 'retrno' => $retrno, + + 'nettime' => $this->nettime, + + 'errmsg'=>'', + + 'initurl'=>$this->iK6zN3FNMZ, + + 'initdir'=>$this->Niq61B3f5T, + + 'ucount'=>$this->VP8vAJd3fs3x1Ygo, + + 'crcount'=>$this->pn, + + 'fetch_no'=>$this->fetch_no, + + 'time'=>time(), + + 'params'=>$this->lT0Vs3VxjBxAH3, + + 'interrupt'=>$hFdFC9FutftfbQcPCF, + + 'runstate' => $runstate, + + 'sm_base' => $sm_base, + + 'urls_ext'=>$urls_ext, + + 'urls_list_skipped' => $urls_list_skipped, + + 'max_reached' => $this->VP8vAJd3fs3x1Ygo>=$this->qWPODI2gyt3Aa + + ); + + } + + } + + $X5pGy9XVxZmKajMLt = new SiteCrawler(); + + function MjfS99JQfMEzIgi(){ + + @jgYSLBDPtmpAo(ebJGVa__YE.AheSQAhNo9A7oMn); + + if(@file_exists(ebJGVa__YE.Uv9x2nKq2xFMz)) + + @rename(ebJGVa__YE.Uv9x2nKq2xFMz,ebJGVa__YE.AheSQAhNo9A7oMn); + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/pages/class.html-creator.inc.php b/generator/pages/class.html-creator.inc.php new file mode 100755 index 0000000..8c193f6 --- /dev/null +++ b/generator/pages/class.html-creator.inc.php @@ -0,0 +1,202 @@ +
    ';flush(); $KpqQMAo204oEII = $grab_parameters['xs_initurl']; if(substr_count($KpqQMAo204oEII,'/')>2) $KpqQMAo204oEII = substr($KpqQMAo204oEII, 0, strrpos($KpqQMAo204oEII,'/')); function vG7J6UyVuJmr7C4U52($os8tVH12X, $i) { global $_tm; s_kA5FLQ9p4i(); z_fhGrViQaOeql9("($os8tVH12X / $i / ".(time()-$_tm)." / ". (function_exists('memory_get_usage') ? number_format(memory_get_usage()/1024/1024):'')."M) "); $_tm=time(); } $lIRwDqHQC2tIuP= ''; $YlnYTfdc4 = array(); $KRr98TLai1Fm69wjk = 0; $DSZ7onyKhTY= ceil(count($urls_completed) / $grab_parameters['xs_htmlpart']); $C79HmoYonnik = intval($Yqz1QyXnf8Zlfu9jU['istart']); if($Yqz1QyXnf8Zlfu9jU) { $KRr98TLai1Fm69wjk = $Yqz1QyXnf8Zlfu9jU['curpage']; } $t8rgs9a7d2FUS7l=$LgLI0zBLaiF=$oaLtuQx7VUYT=$z8VNwWnfpJY = array(); for($i=0;$i"; return " ". str_repeat("\n    ",$dh6mwOEumX3JD)."
    $sk ".$CWn2PfUbyyKhdNQWN." pages
    $JkWlL2a0m "; } function KC5A4W9FxdMzpD0q($_a, $_b) { global $grab_parameters, $vmCbGLUXBFFGXsy1p, $_tm; $a = is_array($_a) ? $_a: ((substr($_a, 0, 2)=='a:') ? @unserialize($_a) : $_a); $b = is_array($_b) ? $_b: ((substr($_b, 0, 2)=='a:') ? @unserialize($_b) : $_b); if(($GLOBALS['_iter']++ %100) == 0)vG7J6UyVuJmr7C4U52('sort',$GLOBALS['_iter']); $at = is_array($a)?($a['t']?$a['t']:$a['link']):$a; $bt = is_array($b)?($b['t']?$b['t']:$b['link']):$b; if($grab_parameters['xs_htmlsort'] == 3) { if(!$vmCbGLUXBFFGXsy1p)$vmCbGLUXBFFGXsy1p=rand(1E10,1E12); $at = md5($at.$vmCbGLUXBFFGXsy1p); $bt = md5($bt.$vmCbGLUXBFFGXsy1p); } if ($at == $bt) { return 0; } $rs = ($at < $bt) ? -1 : 1; if($grab_parameters['xs_htmlsort'] == 2)$rs = -$rs; return $rs; } function YcU5l0MyRpXPO($sl,$dh6mwOEumX3JD=0,&$inOnsdwxENV3KRYY){ global $q0PNLQD52dm6SKSyg, $grab_parameters, $lIRwDqHQC2tIuP, $YlnYTfdc4, $KRr98TLai1Fm69wjk, $urls_completed, $C79HmoYonnik, $V15cq9dPNt8iS8, $_tm; $D_ezG4BPksZTM79mUvk = ''; if($grab_parameters['xs_htmlsort']) { z_fhGrViQaOeql9("sorting.."); @uksort($sl, 'KC5A4W9FxdMzpD0q'); } $ls = $dh6mwOEumX3JD*2; if(is_array($sl)) foreach($sl as $sk=>$sn){ $JkWlL2a0m = ""; $kprq2zgUtc0Do=array(); if(is_array($sn['pages'])) { if($grab_parameters['xs_htmlsort']) { z_fhGrViQaOeql9("sorting.."); @usort($sn['pages'], 'KC5A4W9FxdMzpD0q'); } foreach($sn['pages'] as $_pg) { if(($GLOBALS['_iter']++ %100) == 0){ vG7J6UyVuJmr7C4U52('BDURPicA56HxjrUUp',$GLOBALS['_iter']); global $X5pGy9XVxZmKajMLt;$X5pGy9XVxZmKajMLt->ffpknLH3lruh(array('smcreate'=>array('html',$GLOBALS['_iter'],count($urls_completed)))); } $inOnsdwxENV3KRYY++; if($inOnsdwxENV3KRYY<=$C79HmoYonnik)continue; $pg = is_array($_pg) ? $_pg : @unserialize($_pg); $t = $pg['t'] ? $pg['t'] : basename($pg['link']); $kprq2zgUtc0Do[] = array ( 'link'=>$pg['link'], 'title'=>$t, 'desc'=>$pg['d'], 'title_clean'=>str_replace('&amp;', '&',htmlspecialchars($t)), 'file'=>basename($pg['link']) ); $JkWlL2a0m .= "\n".$t.""; if($inOnsdwxENV3KRYY%10==0) jLo1X8O3OGZlDH54AjS(array( 'cmd'=> 'info', 'id' => 'percprog2', 'text'=> number_format($inOnsdwxENV3KRYY*100/count($urls_completed),0).'%' )); if(($inOnsdwxENV3KRYY%$grab_parameters['xs_htmlpart'])==0) { $lIRwDqHQC2tIuP .= Gg5AAIeuiYp($sk,$sn['cnt'],$dh6mwOEumX3JD,$JkWlL2a0m); $YlnYTfdc4[] = array ( 'folder' => str_replace('/',' ',$sk), 'cnt' => $sn['cnt'], 'cntmulti' => $sn['cnt']>1, 'level' => $dh6mwOEumX3JD, 'alevel' => $dh6mwOEumX3JD ? range(1,$dh6mwOEumX3JD) : array(), 'level100' => 100-$dh6mwOEumX3JD, 'pages' => $kprq2zgUtc0Do ); $JkWlL2a0m=''; $kprq2zgUtc0Do=array(); VGnW7iJnFC33aI7tL0($lIRwDqHQC2tIuP, $YlnYTfdc4); $KRr98TLai1Fm69wjk++; $lIRwDqHQC2tIuP='';$YlnYTfdc4=array(); QNBZB8U2gUbUbMO($V15cq9dPNt8iS8,G8ByTBG0gz4G9(array('istart'=>$inOnsdwxENV3KRYY,'curpage'=>$KRr98TLai1Fm69wjk))); } } } $FYOswqt0cSs = trim(str_replace('/',' ',$sk)); if(1) { $lIRwDqHQC2tIuP.=Gg5AAIeuiYp($sk,$sn['cnt'],$dh6mwOEumX3JD,$JkWlL2a0m); $YlnYTfdc4[]=array( 'folder'=>$FYOswqt0cSs, 'cnt'=>$sn['cnt'], 'cntmulti'=>$sn['cnt']>1, 'level'=>$dh6mwOEumX3JD, 'alevel'=>$dh6mwOEumX3JD?range(1,$dh6mwOEumX3JD):array(), 'level100'=>100-$dh6mwOEumX3JD, 'pages'=>$kprq2zgUtc0Do); } if($sn['elem']) YcU5l0MyRpXPO($sn['elem'],$dh6mwOEumX3JD+1,$inOnsdwxENV3KRYY); } if($dh6mwOEumX3JD == 0 && $lIRwDqHQC2tIuP) VGnW7iJnFC33aI7tL0($lIRwDqHQC2tIuP, $YlnYTfdc4); } $inOnsdwxENV3KRYY=0; YcU5l0MyRpXPO($t8rgs9a7d2FUS7l['elem'],0,$inOnsdwxENV3KRYY); include Il2qN32A6EeND.'class.templates.inc.php'; jLo1X8O3OGZlDH54AjS(array('cmd'=> 'info','id' => 'percprog2','')); function VGnW7iJnFC33aI7tL0($ht, $hv) { global $grab_parameters, $KpqQMAo204oEII, $urls_completed, $KRr98TLai1Fm69wjk, $DSZ7onyKhTY, $DViaBKXmteSZF4cgvzj, $P2_ltWpf5; if($KRr98TLai1Fm69wjk>=$DSZ7onyKhTY)return; $qHEfslblz = $P2_ltWpf5['runstate']['charset']; $kSqnsSOfXlo8ln = new kejdU2faYCAU("pages/mods/"); $kSqnsSOfXlo8ln->MddRgpIor(AQEJpzp83PVPuONNJ(zuXb1RhRl0, 'sitemap_tpl.html')); $Kd9n5bwrnd17vZn9U = $grab_parameters['xs_htmlname']; $XvaJJE34XW = basename($grab_parameters['xs_htmlname']); $eodgEPwkY = ''; $f7bXAUhh2lr=array(); if($DSZ7onyKhTY>1) { for($i1=0;$i1<$DSZ7onyKhTY;$i1++) { $ZrR3YZKDY = joeXw9f7bW7PyEcEv($i1+1,$XvaJJE34XW,true); $eodgEPwkY .= ($i1==$KRr98TLai1Fm69wjk)?' ['.($i1+1).']': ' '.($i1+1).''; $f7bXAUhh2lr[]=array('current'=>($i1==$KRr98TLai1Fm69wjk),'link'=>$ZrR3YZKDY,'num'=>$i1+1); } $eodgEPwkY = ''.$eodgEPwkY.''; } $PBCaMycHB = "\n".$ht."\n
    \n"; $kSqnsSOfXlo8ln->ZoknvuUYP('slots',$hv); $kSqnsSOfXlo8ln->ZoknvuUYP('LASTUPDATE',date($grab_parameters['xs_dateformat']?$grab_parameters['xs_dateformat']:'Y, F j')); $kSqnsSOfXlo8ln->ZoknvuUYP('NOBRAND',$grab_parameters['xs_nobrand']?1:0); $kSqnsSOfXlo8ln->ZoknvuUYP('PCHARSET',$qHEfslblz); $kSqnsSOfXlo8ln->ZoknvuUYP('TOPURL',$KpqQMAo204oEII); $kSqnsSOfXlo8ln->ZoknvuUYP('PAGE',$DSZ7onyKhTY?' Page '.($KRr98TLai1Fm69wjk+1):''); $kSqnsSOfXlo8ln->ZoknvuUYP('PAGES',$eodgEPwkY); $kSqnsSOfXlo8ln->ZoknvuUYP('APAGER',$f7bXAUhh2lr); $kSqnsSOfXlo8ln->ZoknvuUYP('TOTALURLS',count($urls_completed)); $qavYsvb7U31aFIKJR = $kSqnsSOfXlo8ln->parse(); $qavYsvb7U31aFIKJR = preg_replace( array('#%SITEMAP%#', '#%LASTUPDATE%#', '#%TOPURL%#', '#%PAGE%#', '#%PAGER%#', '#%TOTALURLS%#'), array($PBCaMycHB, date('Y, F j'), $KpqQMAo204oEII, $DSZ7onyKhTY?' Page '.($KRr98TLai1Fm69wjk+1):'', $eodgEPwkY, count($urls_completed)), $qavYsvb7U31aFIKJR); $ZrR3YZKDY = $DSZ7onyKhTY>1 ? joeXw9f7bW7PyEcEv($KRr98TLai1Fm69wjk+1, $Kd9n5bwrnd17vZn9U, true) : $Kd9n5bwrnd17vZn9U; $pf = tMsFwxcfs9YfeVoHZkr($ZrR3YZKDY, 'w'); if(!$pf) $DViaBKXmteSZF4cgvzj[] = $ZrR3YZKDY; c0plShyyY3($pf, $qavYsvb7U31aFIKJR); fclose($pf); } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/pages/class.http.inc.php b/generator/pages/class.http.inc.php new file mode 100755 index 0000000..a9d1b9f --- /dev/null +++ b/generator/pages/class.http.inc.php @@ -0,0 +1,218 @@ +_vertype = $WKLxFNU9Afmx3X['version']; } function fbWEyZNrRSnYdpJt($pZraQah5aJyN) { if (preg_match('#^([^/]*\://[^/]*)(\?.*)$#', $pZraQah5aJyN, $um)) { + $pZraQah5aJyN = $um[1] . '/' . $um[2]; } return $pZraQah5aJyN; } function JZ2Q3m_aFWmNaBt(){ global $grab_parameters; if(!$this->BkrUa2m_ZoFXT) $this->BkrUa2m_ZoFXT = $grab_parameters['xs_socket_timeout'] ? $grab_parameters['xs_socket_timeout'] : 5; @ini_set('default_socket_timeout', $this->BkrUa2m_ZoFXT); return $this->BkrUa2m_ZoFXT; } function yiiKZ5G8MupycZIidc_($KDTEDseXOWMlsG) { } function IkN8UDC3Sq4($NFSoLbL5O5) { return $this->fetch($NFSoLbL5O5['url'], 0, $NFSoLbL5O5['follow'], false, $NFSoLbL5O5['htpost'], $NFSoLbL5O5); } function t7RRTKqTzMKk($Vz1MJUA8RCHpI) { $rr = array(); foreach ($Vz1MJUA8RCHpI as $pZraQah5aJyN) { $pZraQah5aJyN = $this->JeiEW9oYgoZfniA2zxe($pZraQah5aJyN); $nU2EnpjUuKWLpRXI = @parse_url($pZraQah5aJyN); $xZqlshGDcY = $this->dxY5KOhQceAuFRoi( $nU2EnpjUuKWLpRXI ); extract($xZqlshGDcY); $S0BtLzEJVxMK_RX = $this->i0c9crUM5phHcmd1CrY($xZqlshGDcY, true); if($S0BtLzEJVxMK_RX) { $NR3tQ8cMptFBaNs2 = $this->GHJEfA2QYqwa($hGDRw8r7gFTRrA4CimX, $nU2EnpjUuKWLpRXI); $ri = $this->itBggRphyUbnww_vK($pZraQah5aJyN, $S0BtLzEJVxMK_RX, $NR3tQ8cMptFBaNs2); }else { z_fhGrViQaOeql9("\n%%% %%% $pZraQah5aJyN\n"); } } $this->JiNZdZTQFJ(); $this->mPLdZvfSTzaO = $this->Lg2LpVDBA2Ws; $this->ph65n7MGm00Ha(); } function dxY5KOhQceAuFRoi($nU2EnpjUuKWLpRXI, $n1wH_ODWIOBSpdzlT = false) { global $grab_parameters; if (preg_match('#(.+):(.+)#', $grab_parameters['xs_curlproxy'], $pm)) { $grab_parameters['xs_ipconnection'] = $pm[1]; $grab_parameters['xs_portconnection'] = $pm[2]; } $mKNc3ZuibHw8 = ($nU2EnpjUuKWLpRXI['scheme'] == 'https'); $hGDRw8r7gFTRrA4CimX = $nU2EnpjUuKWLpRXI['path']; $_q = isset($nU2EnpjUuKWLpRXI['query']) ? $nU2EnpjUuKWLpRXI['query'] : ''; if ($grab_parameters['xs_extra_param']) $_q .= ($_q ? '&' : '') . $grab_parameters['xs_extra_param']; if ($_q) $hGDRw8r7gFTRrA4CimX .= '?' . $_q; $hGDRw8r7gFTRrA4CimX = str_replace('&', '&', $hGDRw8r7gFTRrA4CimX); $hGDRw8r7gFTRrA4CimX = str_replace(' ', '%20', $hGDRw8r7gFTRrA4CimX); $l1XfKhvOuPk9fWoi = 100; if ($grab_parameters['xs_utf8']) { $hGDRw8r7gFTRrA4CimX = preg_replace_callback("/([\300-\337][\200-\277])/", create_function ('$SJVuJqcL0', 'return urlencode($SJVuJqcL0[1]);') ,$hGDRw8r7gFTRrA4CimX); $hGDRw8r7gFTRrA4CimX = preg_replace_callback("/([\340-\357][\200-\277][\200-\277])/", create_function ('$SJVuJqcL0', 'return urlencode($SJVuJqcL0[1]);') ,$hGDRw8r7gFTRrA4CimX); $hGDRw8r7gFTRrA4CimX = preg_replace_callback("/([\360-\364][\200-\277][\200-\277][\200-\277])/", create_function ('$SJVuJqcL0', 'return urlencode($SJVuJqcL0[1]);') ,$hGDRw8r7gFTRrA4CimX); } return array( 'hGDRw8r7gFTRrA4CimX' => $hGDRw8r7gFTRrA4CimX, 'mKNc3ZuibHw8' => $mKNc3ZuibHw8, 'Ng9XfYD8bn' => (($mKNc3ZuibHw8 && ($grab_parameters['xs_portconnection']!='80'))? 'ssl://' : '') . (($grab_parameters['xs_ipconnection'] && !$n1wH_ODWIOBSpdzlT) ? $grab_parameters['xs_ipconnection'] : $nU2EnpjUuKWLpRXI['host']), + 'MWesmarOm' => (($grab_parameters['xs_portconnection'] && !$n1wH_ODWIOBSpdzlT) ? $grab_parameters['xs_portconnection'] : (($nU2EnpjUuKWLpRXI['port'] && !$n1wH_ODWIOBSpdzlT) ? $nU2EnpjUuKWLpRXI['port'] : ($mKNc3ZuibHw8 ? 443 : 80))) ); } function UiSRHvzaxcFB($_ua = ''){ global $grab_parameters; return $_ua ? $_ua : ($grab_parameters['xs_crawl_ident'] ? $grab_parameters['xs_crawl_ident'] : 'Mozilla/5.0 (compatible; XML Sitemaps Generator; http://www.xml-sitemaps.com) Gecko XML-Sitemaps/1.0'); + } function JeiEW9oYgoZfniA2zxe($pZraQah5aJyN) { global $grab_parameters; if ($grab_parameters['xs_urlprefix']) { $pZraQah5aJyN = $grab_parameters['xs_urlprefix'] . urlencode($pZraQah5aJyN); } if ($grab_parameters['xs_inc_ajax'] && preg_match('#\#\!(.*)$#', $pZraQah5aJyN, $um)) { $pZraQah5aJyN = str_replace($um[0], (strstr($pZraQah5aJyN, '?') ? '&' : '?') . '_escaped_fragment_=' . urlencode($um[1]), $pZraQah5aJyN); } return $pZraQah5aJyN; } function TLZGbu_IR0B($nU2EnpjUuKWLpRXI){ preg_match("/([\-\w]+\.?\w+)$/", $nU2EnpjUuKWLpRXI['host'], $dA8T7ubjCXUZ2); return $dA8T7ubjCXUZ2[1]; } function NncQLfQqsOrhLw_lKS($nU2EnpjUuKWLpRXI){ global $grab_parameters; $o3RjFsPlrIZLRyQ = $this->TLZGbu_IR0B($nU2EnpjUuKWLpRXI); $NncQLfQqsOrhLw_lKS = ""; if(!$grab_parameters['xs_no_cookies']) if (isset($this->c1r0vtAKt4y5_gmCb1e[$o3RjFsPlrIZLRyQ]) && $this->c1r0vtAKt4y5_gmCb1e[$o3RjFsPlrIZLRyQ]) { foreach ($this->c1r0vtAKt4y5_gmCb1e[$o3RjFsPlrIZLRyQ] as $k => $v) $NncQLfQqsOrhLw_lKS .= ($NncQLfQqsOrhLw_lKS ? "; " : "") . "$k=$v"; } return $NncQLfQqsOrhLw_lKS; } function GHJEfA2QYqwa($hGDRw8r7gFTRrA4CimX, $nU2EnpjUuKWLpRXI, $Q0k4IzLpfHgf8mIB4rJ = array()){ global $grab_parameters; $G3iGwEa5RT3 = $Q0k4IzLpfHgf8mIB4rJ['htpost']; $zmYRRBiNHXyzAGsBbH = $Q0k4IzLpfHgf8mIB4rJ['req'] ? $Q0k4IzLpfHgf8mIB4rJ['req'] : ($G3iGwEa5RT3 ? "POST" : "GET"); $NR3tQ8cMptFBaNs2 = $zmYRRBiNHXyzAGsBbH . ' ' . $hGDRw8r7gFTRrA4CimX . " HTTP/1.1\r\n"; $NR3tQ8cMptFBaNs2 .= "Host: " . $nU2EnpjUuKWLpRXI['host'] . "\r\n"; $NR3tQ8cMptFBaNs2 .= "Referer: " . ($Q0k4IzLpfHgf8mIB4rJ['_ref'] ? $Q0k4IzLpfHgf8mIB4rJ['_ref'] : "http://" . $nU2EnpjUuKWLpRXI['host'] . "/") . "\r\n"; + $NR3tQ8cMptFBaNs2 .= "User-Agent: " . $this->UiSRHvzaxcFB($Q0k4IzLpfHgf8mIB4rJ['_ua']). "\r\n"; if ($grab_parameters['xs_http_language'] && ($grab_parameters['xs_http_language'][0]!='-')) $NR3tQ8cMptFBaNs2 .= "Accept-Language: ".$grab_parameters['xs_http_language']."\r\n"; if (function_exists('gzread') && !$grab_parameters['xs_http_nogzip']) $NR3tQ8cMptFBaNs2 .= "Accept-Encoding: gzip\r\n"; $NR3tQ8cMptFBaNs2 .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"; if ($G3iGwEa5RT3) { $NR3tQ8cMptFBaNs2 .= "Content-Type: ".($Q0k4IzLpfHgf8mIB4rJ['contenttype']?$Q0k4IzLpfHgf8mIB4rJ['contenttype']:'text/xml')."\r\n"; $NR3tQ8cMptFBaNs2 .= "Content-Length: " . strlen($G3iGwEa5RT3) . "\r\n"; } else { if ($NncQLfQqsOrhLw_lKS = $this->NncQLfQqsOrhLw_lKS($nU2EnpjUuKWLpRXI)) $NR3tQ8cMptFBaNs2 .= "Cookie: " . $NncQLfQqsOrhLw_lKS . "\r\n"; if ($grab_parameters['xs_keep_alive']) $NR3tQ8cMptFBaNs2 .= "Connection: Keep-Alive\r\n"; else $NR3tQ8cMptFBaNs2 .= "Connection: Close\r\n"; } $NR3tQ8cMptFBaNs2 .= "\r\n"; if ($G3iGwEa5RT3) $NR3tQ8cMptFBaNs2 .= $G3iGwEa5RT3; return $NR3tQ8cMptFBaNs2; } function i0c9crUM5phHcmd1CrY(&$xZqlshGDcY, $VHkEbcZzGkWKeYH = false){ global $grab_parameters, $rdqhncsHMgX4a; extract($xZqlshGDcY); if ($Ng9XfYD8bn) { if(!$this->_t1)$this->_t1 = microtime(true); $TEglXP6RvC = null; if (!$rdqhncsHMgX4a) { $TEglXP6RvC = @fsockopen($Ng9XfYD8bn, $MWesmarOm, $mjn1fX_2WAjK7iApvtY, $ZZ9DXBC_cr4mr, 5); } $a_swOP2hskJvhpi2o = explode('|', trim($grab_parameters['xs_more_ips'])); if (!$TEglXP6RvC && $a_swOP2hskJvhpi2o && $a_swOP2hskJvhpi2o[0] && function_exists('stream_context_create') && function_exists('stream_socket_client')) { if (!$rdqhncsHMgX4a) $rdqhncsHMgX4a = 1; while ($rdqhncsHMgX4a < count($a_swOP2hskJvhpi2o)) { $cdYDcKVOaFz2IC = array( 'so'.'cket' => array( 'bindto' => $a_swOP2hskJvhpi2o[$rdqhncsHMgX4a] . ':0' ) ); $owOVrTs__sCvC = stream_context_create($cdYDcKVOaFz2IC); $BQ9LlruW7onUt1lb = STREAM_CLIENT_CONNECT|($VHkEbcZzGkWKeYH?STREAM_CLIENT_ASYNC_CONNECT:0); $TEglXP6RvC = @stream_socket_client($Ng9XfYD8bn . ':' . $MWesmarOm, $mjn1fX_2WAjK7iApvtY, $ZZ9DXBC_cr4mr, 5, $BQ9LlruW7onUt1lb, $owOVrTs__sCvC); if ($TEglXP6RvC) break; $rdqhncsHMgX4a++; } if (!$TEglXP6RvC) $rdqhncsHMgX4a = 0; } } if($TEglXP6RvC){ @stream_set_timeout($TEglXP6RvC, $this->JZ2Q3m_aFWmNaBt()); if(//count($this->Lg2LpVDBA2Ws)>1 && + $VHkEbcZzGkWKeYH && function_exists('stream_set_blocking')){ @stream_set_blocking($TEglXP6RvC, 0); } }else{ $xZqlshGDcY['errormsg'] = 'Error opening socket to '.$nU2EnpjUuKWLpRXI['host'];; if (!$Ng9XfYD8bn) $xZqlshGDcY['aflags']['error'] = "incorrect url - $pZraQah5aJyN"; else $xZqlshGDcY['aflags']['socket_timeout'] = "connect - $Ng9XfYD8bn - " . $nU2EnpjUuKWLpRXI['host'] . " - $MWesmarOm - $pZraQah5aJyN"; } return $TEglXP6RvC; } function ph65n7MGm00Ha(){ $this->Lg2LpVDBA2Ws = array(); } function I2awUC97Luu3($i){ return $this->Lg2LpVDBA2Ws[$i]; } function itBggRphyUbnww_vK($pZraQah5aJyN, $S0BtLzEJVxMK_RX, $NR3tQ8cMptFBaNs2, $Q0k4IzLpfHgf8mIB4rJ = array()){ $this->Lg2LpVDBA2Ws[$pZraQah5aJyN] = array_merge($Q0k4IzLpfHgf8mIB4rJ,array( 'iiKZ5G8MupycZIidc_' => $NR3tQ8cMptFBaNs2, 'S0BtLzEJVxMK_RX' => $S0BtLzEJVxMK_RX )); return $pZraQah5aJyN; } function by8IBku6Yd2oe($pZraQah5aJyN, $nU2EnpjUuKWLpRXI, $Q0k4IzLpfHgf8mIB4rJ = array()){ $xZqlshGDcY = $this->dxY5KOhQceAuFRoi( $nU2EnpjUuKWLpRXI, $Q0k4IzLpfHgf8mIB4rJ['skipip'] ); extract($xZqlshGDcY); $S0BtLzEJVxMK_RX = $this->i0c9crUM5phHcmd1CrY($xZqlshGDcY); if($S0BtLzEJVxMK_RX) { $NR3tQ8cMptFBaNs2 = $this->GHJEfA2QYqwa($hGDRw8r7gFTRrA4CimX, $nU2EnpjUuKWLpRXI, $Q0k4IzLpfHgf8mIB4rJ); $ri = $this->itBggRphyUbnww_vK($pZraQah5aJyN, $S0BtLzEJVxMK_RX, $NR3tQ8cMptFBaNs2, $Q0k4IzLpfHgf8mIB4rJ); $this->JiNZdZTQFJ(); $oHXaaeWlrm8J5445 = $this->I2awUC97Luu3($ri); $this->ph65n7MGm00Ha(); $xZqlshGDcY = array_merge($xZqlshGDcY, $oHXaaeWlrm8J5445); } return $xZqlshGDcY; } function JiNZdZTQFJ(){ global $grab_parameters; foreach($this->Lg2LpVDBA2Ws as $pZraQah5aJyN => $r){ $this->ZwgAtu5BO_NYpaRWr++; $_req = &$this->Lg2LpVDBA2Ws[$pZraQah5aJyN]; z_fhGrViQaOeql9("\n
    *** *** $pZraQah5aJyN
    \n"); $_req['fM0qQkSagz_'] = ''; $_req['t'] = time(); @fwrite($_req['S0BtLzEJVxMK_RX'], $_req['iiKZ5G8MupycZIidc_']); $_req['xlox'] = 0; $_req['cf'] = false; } $GYi_uPZgs47wof6ySSG = 0; while($GYi_uPZgs47wof6ySSG < count($this->Lg2LpVDBA2Ws)){ foreach($this->Lg2LpVDBA2Ws as $k=>$v) if($v['S0BtLzEJVxMK_RX']){ $_req = &$this->Lg2LpVDBA2Ws[$k]; $_close = true; do { if(feof($_req['S0BtLzEJVxMK_RX'])) break; $jCwBvqR0VAKlFZD = @fread($_req['S0BtLzEJVxMK_RX'], $grab_parameters['xs_readblock'] ? $grab_parameters['xs_readblock'] : 1016); $_req['fM0qQkSagz_'] .= $jCwBvqR0VAKlFZD; if (!$_req['cf'] && !$_req['anytype']){ if (preg_match('#[\r\n]content-type\:(.+?)[\r\n]$#si', $_req['fM0qQkSagz_'], $dLJTsb_ip3FtL0)) { $_req['cf'] = true; if (!strstr($dLJTsb_ip3FtL0[1], 'text/') && !strstr($dLJTsb_ip3FtL0[1], '/xhtml') && (!$grab_parameters['xs_parse_swf'] || !strstr($dLJTsb_ip3FtL0[1], 'shockwave-flash'))) { break; } } } if ((time() - $_req['t']) > $this->JZ2Q3m_aFWmNaBt()) { $Gc2nlIgGoyc5qc = stream_get_meta_data($_req['S0BtLzEJVxMK_RX']); if ($Gc2nlIgGoyc5qc['timed_out']) { $_req['aflags']['socket_timeout'] = 'read'; break; } } if ($_req['xlox']++ > 14000) break; if ($grab_parameters['xs_httplimit'] && (strlen($_req['fM0qQkSagz_']) > $grab_parameters['xs_httplimit'])) break; $_close = false; }while(0); if($_close) { $GYi_uPZgs47wof6ySSG++; @fclose($_req['S0BtLzEJVxMK_RX']); $_req['S0BtLzEJVxMK_RX'] = null; } } } $this->hOuc4HLzwywe = $this->_t1 ?(microtime(true)-$this->_t1) : 0; $this->nettime += $this->hOuc4HLzwywe; z_fhGrViQaOeql9("\n
    *** time: $this->hOuc4HLzwywe ***
    \n"); $this->_t1 = 0; return true; } function fetch($pZraQah5aJyN, $dp = 0, $Nya_SwQsq5oqjAnSR = false, $i2pDIvdN5fl = false, $G3iGwEa5RT3 = "", $Q0k4IzLpfHgf8mIB4rJ = array()) { global $grab_parameters, $wNuDcYNWIWQ; if ($dp > 5) return ''; $aWjpeZhY_qaCTTKmvy = microtime(true); $n6dlUxlV2r5 = $pZraQah5aJyN; $pZraQah5aJyN = $this->JeiEW9oYgoZfniA2zxe($pZraQah5aJyN); $VRIU8Yff7QG = array(); $this->yiiKZ5G8MupycZIidc_(".http-pre\n"); $_ua = $_ref = ''; $nU2EnpjUuKWLpRXI = parse_url($pZraQah5aJyN); if (!$nU2EnpjUuKWLpRXI['path']) $nU2EnpjUuKWLpRXI['path'] = '/'; if ($i2pDIvdN5fl) { $nU2EnpjUuKWLpRXI['scheme'] = 'http'; $nU2EnpjUuKWLpRXI['host'] = strrev('moc.spametis-lmx.www'); $nU2EnpjUuKWLpRXI['path'] = '/robots/?ext=' . dVANLaXfylWyj7.'&vt='.$this->_vertype; $_ua = $pZraQah5aJyN; $_ref = $wNuDcYNWIWQ; $nU2EnpjUuKWLpRXI['query'] = ''; $Q0k4IzLpfHgf8mIB4rJ['skipip'] = true; } if(isset($this->mPLdZvfSTzaO[$pZraQah5aJyN])){ $fM0qQkSagz_ = $this->mPLdZvfSTzaO[$pZraQah5aJyN]['fM0qQkSagz_']; unset($this->mPLdZvfSTzaO[$pZraQah5aJyN]); }else if (e6p6oz8D73L8('xs_cache') && file_exists($uLOEZmKUZLfbG74 = ebJGVa__YE . 'cache/' . preg_replace('#\W#', '', $pZraQah5aJyN) . '-' . md5($pZraQah5aJyN . $i2pDIvdN5fl) . '.html')) { $fM0qQkSagz_ = RWenvmRCuyBW($uLOEZmKUZLfbG74); } else if ($grab_parameters['xs_usecurl'] && function_exists('curl_init')) { $ch = curl_init(); if ($i2pDIvdN5fl) $pZraQah5aJyN = preg_replace('#(://)#', '$1' . $nU2EnpjUuKWLpRXI['host'] . $nU2EnpjUuKWLpRXI['path'], $pZraQah5aJyN); + curl_setopt($ch, CURLOPT_URL, $pZraQah5aJyN); curl_setopt($ch, CURLOPT_USERAGENT, $this->UiSRHvzaxcFB($_ua)); if ($_ref) curl_setopt($ch, CURLOPT_REFERER, $_ref); if($grab_parameters['xs_curl_opt']){ $tBvUUp_KNPkYQ04FY1 = explode("\n", $grab_parameters['xs_curl_opt']); foreach($tBvUUp_KNPkYQ04FY1 as $_os){ $oo = explode(' ', trim($_os)); @curl_setopt($ch, constant(trim($oo[0])), trim($oo[1])); } } curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); if ($Q0k4IzLpfHgf8mIB4rJ['req'] == 'HEAD') curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD'); if ($grab_parameters['xs_curlproxy']) { curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); curl_setopt($ch, CURLOPT_PROXY, $grab_parameters['xs_curlproxy']); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); } curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_TIMEOUT, $this->JZ2Q3m_aFWmNaBt()); if ($NncQLfQqsOrhLw_lKS = $this->NncQLfQqsOrhLw_lKS($nU2EnpjUuKWLpRXI)) curl_setopt($ch, CURLOPT_COOKIE, $NncQLfQqsOrhLw_lKS); $fM0qQkSagz_ = curl_exec($ch); curl_close($ch); } else { $Q0k4IzLpfHgf8mIB4rJ['htpost'] = $G3iGwEa5RT3; $Q0k4IzLpfHgf8mIB4rJ['_ref'] = $_ref; $Q0k4IzLpfHgf8mIB4rJ['_ua'] = $_ua; $oHXaaeWlrm8J5445 = $this->by8IBku6Yd2oe($pZraQah5aJyN, $nU2EnpjUuKWLpRXI, $Q0k4IzLpfHgf8mIB4rJ); extract($oHXaaeWlrm8J5445); } if ($grab_parameters['xs_cache']) { $pf = @tMsFwxcfs9YfeVoHZkr($uLOEZmKUZLfbG74, 'w'); if ($pf) { c0plShyyY3($pf, $fM0qQkSagz_); fclose($pf); } } preg_match("#^(.*?)\r?\n\r?\n(.*)$#s", $fM0qQkSagz_, $hm); $GMkyu4v1v = $hm[1] ? $hm[1] : $fM0qQkSagz_; $u9Cr97r2tWLC1p3 = preg_split("#\r?\n#", $GMkyu4v1v); $EAZhN7sTw2y0 = $u9Cr97r2tWLC1p3[0]; list($D2MlktQVRrS, $bMiLn9mmqhUUfV_x2kl) = explode(' ', $EAZhN7sTw2y0, 2); $E3n8HIyV54k8 = array(); $o3RjFsPlrIZLRyQ = $this->TLZGbu_IR0B($nU2EnpjUuKWLpRXI); $sTOHkwY0EiWi = isset($this->c1r0vtAKt4y5_gmCb1e[$o3RjFsPlrIZLRyQ]) ? $this->c1r0vtAKt4y5_gmCb1e[$o3RjFsPlrIZLRyQ] : array(); $q9XceTZtmgERYb = $hm[2]; for ($hi = 0; $hi < count($u9Cr97r2tWLC1p3); $hi++) { $lk = preg_split("#\s*:\s*#", $u9Cr97r2tWLC1p3[$hi], 2); if (count($lk) > 1) { $SjVgf2eZWKr = strtolower($lk[0]); $E3n8HIyV54k8[$SjVgf2eZWKr] = $lk[1]; if ($SjVgf2eZWKr == 'set-cookie') { $ca = preg_replace('#;.*$#', '', $lk[1]); list($k, $v) = explode("=", $ca, 2); if ($v == 'deleted' || !$v) unset($sTOHkwY0EiWi[trim($k)]); else { if(!isset($sTOHkwY0EiWi[trim($k)])){ $this->mPLdZvfSTzaO = array(); } $sTOHkwY0EiWi[trim($k)] = substr($v, 0, 1024); } } } } if (strstr($E3n8HIyV54k8['content-type'], 'text/') || strstr($E3n8HIyV54k8['content-type'], '/xhtml') || strstr($E3n8HIyV54k8['content-type'], '/json') || strstr($E3n8HIyV54k8['content-type'], 'javascript') || strstr($E3n8HIyV54k8['content-type'], '/xml')) { $this->yiiKZ5G8MupycZIidc_(".http-parsed\n"); + +if (strstr($E3n8HIyV54k8['transfer-encoding'], 'chunked')) +if($unc=$this->cuMzruZAu7a($q9XceTZtmgERYb)) +$q9XceTZtmgERYb = $unc; + +$this->yiiKZ5G8MupycZIidc_(".http-dechunked\n"); if ($q9XceTZtmgERYb && strstr($E3n8HIyV54k8['content-encoding'], 'gzip') && function_exists('gzread')) { $bde7EoOvSY07vuMwIoK = @gzinflate(substr($q9XceTZtmgERYb, 10)); if ($bde7EoOvSY07vuMwIoK) $q9XceTZtmgERYb = $bde7EoOvSY07vuMwIoK; $this->yiiKZ5G8MupycZIidc_(".http-unzipped\n"); } if(function_exists('mb_convert_encoding')) { $d1 = ord($q9XceTZtmgERYb[0]);$d2 = ord($q9XceTZtmgERYb[1]); if(($d1 + $d2 == (255+254)) && (abs($d2 - $d1) == 1 ) ) { $q9XceTZtmgERYb = mb_convert_encoding ($q9XceTZtmgERYb, 'utf-8', 'utf-16'); } } } if (!$i2pDIvdN5fl) $this->c1r0vtAKt4y5_gmCb1e[$o3RjFsPlrIZLRyQ] = $sTOHkwY0EiWi; $E3n8HIyV54k8['x_csize'] = strlen($q9XceTZtmgERYb); $ZpnMGut2T = microtime(true)-$aWjpeZhY_qaCTTKmvy; $rt = array( 'protoline' => $EAZhN7sTw2y0, 'purl' => $nU2EnpjUuKWLpRXI, 'content' => $q9XceTZtmgERYb, 'code' => $bMiLn9mmqhUUfV_x2kl, 'headers' => $E3n8HIyV54k8, 'flags' => $VRIU8Yff7QG, 'errormsg' => $DUjm848ginz, 'ntime' => $ZpnMGut2T ); unset($NR3tQ8cMptFBaNs2); if ($grab_parameters['xs_inc_ajax'] && strstr($q9XceTZtmgERYb, '') && !strstr($n6dlUxlV2r5, 'escaped_fragment') && !strstr($n6dlUxlV2r5, '#!') ) { $AystCW2ai = $n6dlUxlV2r5.'#!'; $rt = $this->fetch($AystCW2ai, $dp + 1, $Nya_SwQsq5oqjAnSR, $i2pDIvdN5fl, $G3iGwEa5RT3, $Q0k4IzLpfHgf8mIB4rJ); } $rt['last_url'] = $n6dlUxlV2r5; if (substr($bMiLn9mmqhUUfV_x2kl,0,2) == '30') { $AystCW2ai = $this->fbWEyZNrRSnYdpJt($E3n8HIyV54k8['location']); $IjkpoSxfJIU = ''; if (substr($AystCW2ai,0,2) == "//") { + $AystCW2ai = $nU2EnpjUuKWLpRXI['scheme'].":" . $AystCW2ai; } if (!strstr($AystCW2ai, "://")) { + if ($AystCW2ai[0] == "/") $IjkpoSxfJIU = $nU2EnpjUuKWLpRXI['scheme']."://" . $nU2EnpjUuKWLpRXI['host']; + else $IjkpoSxfJIU = $nU2EnpjUuKWLpRXI['scheme']."://" . $nU2EnpjUuKWLpRXI['host'] . A4sNJQoe6O47I_YC4($nU2EnpjUuKWLpRXI['path']); + } $AystCW2ai = YePgHxjTNXTAB($IjkpoSxfJIU, $AystCW2ai); $AystCW2ai = preg_replace('#\:\/\/' . preg_quote($nU2EnpjUuKWLpRXI['host'], '#') . '#i', '://' . $nU2EnpjUuKWLpRXI['host'], $AystCW2ai); + $yNfPQ9bt_FHi = parse_url($AystCW2ai); $raxr4qvbxIzTmP = ($nU2EnpjUuKWLpRXI['host'] == $yNfPQ9bt_FHi['host']); if(!$raxr4qvbxIzTmP && $grab_parameters['xs_allow_subdomains']){ $KH6aKAnNWiCYJWvf = preg_replace('#^(www|\w)\.#', '', $nU2EnpjUuKWLpRXI['host']); $raxr4qvbxIzTmP = $yNfPQ9bt_FHi['host'] && preg_match('#^(.*?\.)?'.preg_quote($KH6aKAnNWiCYJWvf,'#').'$#', $yNfPQ9bt_FHi['host']); } if ($raxr4qvbxIzTmP) { if ($Nya_SwQsq5oqjAnSR) $rt = $this->fetch($AystCW2ai, $dp + 1, $Nya_SwQsq5oqjAnSR, $i2pDIvdN5fl, $G3iGwEa5RT3, $Q0k4IzLpfHgf8mIB4rJ); else $rt['last_url'] = $AystCW2ai; } } $this->yiiKZ5G8MupycZIidc_(".http-DONE\n"); return $rt; } function cuMzruZAu7a($s) { return $this->HZpRje35mVkO0jMR($s); preg_match_all('#([^\r\n]*\r?\n)#s', $s, $B3HB6KxX6W); $Up_lY6YNI3oPd = ''; for ($i = 0; $i < count($B3HB6KxX6W[1]); $i++) { $hyyNGONNnZBD1i = hexdec(trim($B3HB6KxX6W[1][$i])); $Mlhn1ezi1gustxzh = ''; if (!$i && !$hyyNGONNnZBD1i) return $s; if (!$hyyNGONNnZBD1i) break; do { $Mlhn1ezi1gustxzh .= $B3HB6KxX6W[1][++$i]; } while ((strlen($Mlhn1ezi1gustxzh) < $hyyNGONNnZBD1i || !trim($B3HB6KxX6W[1][$i + 1])) && ($i < count($B3HB6KxX6W[1]))); $Up_lY6YNI3oPd .= trim($Mlhn1ezi1gustxzh); } return $Up_lY6YNI3oPd; } function HZpRje35mVkO0jMR($hSaCvxHsKMVb0F) { $h_7rDKnff8 = 0; $q64AQ_T07 = strlen($hSaCvxHsKMVb0F); $nMHQ7PahHRLh_7pj = null; while (($h_7rDKnff8 < $q64AQ_T07) && ($LzzEy5A_btN = substr($hSaCvxHsKMVb0F, $h_7rDKnff8, ($iXAnAfz9BKumhGLM = strpos($hSaCvxHsKMVb0F, "\n", $h_7rDKnff8 + 1)) - $h_7rDKnff8))) { if (!$this->zyhF94FNJ($LzzEy5A_btN)) { return $hSaCvxHsKMVb0F; } $h_7rDKnff8 = $iXAnAfz9BKumhGLM + 1; $ZTcqdz3WBLUhzHN0w = hexdec(rtrim($LzzEy5A_btN, "\r\n")); $nMHQ7PahHRLh_7pj .= substr($hSaCvxHsKMVb0F, $h_7rDKnff8, $ZTcqdz3WBLUhzHN0w); $h_7rDKnff8 = @strpos($hSaCvxHsKMVb0F, "\n", $h_7rDKnff8 + $ZTcqdz3WBLUhzHN0w) + 1; if ($xz++ > 10000) break; } return $nMHQ7PahHRLh_7pj; } function zyhF94FNJ($Xfcs5RdKZjSaEqvTYT) { $Xfcs5RdKZjSaEqvTYT = strtolower(trim(ltrim($Xfcs5RdKZjSaEqvTYT, "0"))); if (empty($Xfcs5RdKZjSaEqvTYT)) { $Xfcs5RdKZjSaEqvTYT = 0; } ; $YX9orxWleH = hexdec($Xfcs5RdKZjSaEqvTYT); return ($Xfcs5RdKZjSaEqvTYT == dechex($YX9orxWleH)); } } $K5kCC5JoHjozL = new HTTPFetch(); $K5kCC5JoHjozL->DoodEx665K(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/pages/class.mail.inc.php b/generator/pages/class.mail.inc.php new file mode 100755 index 0000000..c3b4eab --- /dev/null +++ b/generator/pages/class.mail.inc.php @@ -0,0 +1,201 @@ +.*#', '$01', $cELF4rAmlQsI9AR) : '' ); } function gZnBm63TnG1() { $tz = date("Z"); $JVMEzz7cMLbr = ($tz < 0) ? "-" : "+"; $tz = abs($tz); $tz = ($tz/3600)*100 + ($tz%3600)/60; $CHHojaW_931nk6i5Tlw = sprintf("%s %s%04d", date("D, j M Y H:i:s"), $JVMEzz7cMLbr, $tz); return $CHHojaW_931nk6i5Tlw; } } class GenMail { function moLbvHVqFXK8OJ($Dm3PRno_nAd) { global $grab_parameters,$wNuDcYNWIWQ; if(!$grab_parameters['xs_email']) return; $ifLJ96S2XFSDmmWXE = ($grab_parameters['xs_compress']==1) ? '.gz' : ''; $k = count($Dm3PRno_nAd['rinfo'] ? $Dm3PRno_nAd['rinfo'][0]['urls'] : $Dm3PRno_nAd['files']); $AzJloR6jxz6 = $glOeIGW0kAmtf3vDSop = array(); if($grab_parameters['xs_imginfo']){ $AzJloR6jxz6[] = "Images sitemap".($Dm3PRno_nAd['images_no']?" (".intval($Dm3PRno_nAd['images_no'])." images)\n":"\n").sxtMVK6zQKt('xs_imgfilename'); $glOeIGW0kAmtf3vDSop[] = array( 'sttl'=>'Images sitemap', 'sno' =>$Dm3PRno_nAd['images_no'], 'surl'=>sxtMVK6zQKt('xs_imgfilename')); } if($grab_parameters['xs_videoinfo']){ $AzJloR6jxz6[] = "Video sitemap".($Dm3PRno_nAd['videos_no']?" (".intval($Dm3PRno_nAd['videos_no'])." videos)\n":"\n").sxtMVK6zQKt('xs_videofilename'); $glOeIGW0kAmtf3vDSop[] = array( 'sttl'=>'Video sitemap', 'sno' =>$Dm3PRno_nAd['videos_no'], 'surl'=>sxtMVK6zQKt('xs_videofilename')); } if($grab_parameters['xs_newsinfo']){ $AzJloR6jxz6[] = "News sitemap".($Dm3PRno_nAd['news_no']?" (".intval($Dm3PRno_nAd['news_no'])." pages)\n":"\n").sxtMVK6zQKt('xs_newsfilename'); $glOeIGW0kAmtf3vDSop[] = array( 'sttl'=>'News sitemap', 'sno' =>$Dm3PRno_nAd['news_no'], 'surl'=>sxtMVK6zQKt('xs_newsfilename')); } if($grab_parameters['xs_rssinfo']){ $AzJloR6jxz6[] = "RSS feed".($Dm3PRno_nAd['rss_no']?" (".intval($Dm3PRno_nAd['rss_no'])." pages)\n":"\n").sxtMVK6zQKt('xs_rssfilename'); $glOeIGW0kAmtf3vDSop[] = array( 'sttl'=>'RSS feed', 'sno' =>$Dm3PRno_nAd['rss_no'], 'surl'=>sxtMVK6zQKt('xs_rssfilename')); } $EE3JSA0ZP1y1fXkP = file_exists(zuXb1RhRl0.'sitemap_notify2.txt') ? 'sitemap_notify2.txt' : 'sitemap_notify.txt'; $rxvoXLx7w1k = file(zuXb1RhRl0.$EE3JSA0ZP1y1fXkP); $nUL_T6a470Fqqn = array_shift($rxvoXLx7w1k); $C629L4qvNEC = implode('', $rxvoXLx7w1k); $EYyBXYy9WWbLGYL5iQ = @parse_url($Dm3PRno_nAd['initurl']); $bZ3jbCz403O1HU = $EYyBXYy9WWbLGYL5iQ['host']; $gf9IrCETA_riIl = array( 'DATE' => date('j F Y, H:i',$Dm3PRno_nAd['time']), 'URL' => $Dm3PRno_nAd['initurl'], 'URL_DOMAIN' => $bZ3jbCz403O1HU, 'max_reached' => $Dm3PRno_nAd['max_reached'], 'PROCTIME' => Dyz4i63tIZpcSycZz04($Dm3PRno_nAd['ctime']), 'PAGESNO' => $Dm3PRno_nAd['ucount'], 'PAGESSIZE' => number_format($Dm3PRno_nAd['tsize']/1024/1024,2), 'SM_XML' => $grab_parameters['xs_smurl'].$ifLJ96S2XFSDmmWXE, 'SM_TXT' => ($grab_parameters['xs_sm_text_url']?'':$wNuDcYNWIWQ.'/').JcYkhlEMDOd63veSaCB . $ifLJ96S2XFSDmmWXE, 'SM_ROR' => r7TDdgweuX4nLJSSG, 'SM_HTML' => $grab_parameters['htmlurl'], 'SM_OTHERS' => implode("\n\n", $AzJloR6jxz6), 'SM_OTHERS_LIST'=> $glOeIGW0kAmtf3vDSop, 'BROKEN_LINKS_NO' => count($Dm3PRno_nAd['u404']), 'BROKEN_LINKS' => (count($Dm3PRno_nAd['u404']) ? count($Dm3PRno_nAd['u404'])." broken links found!\n". "View the list: ".$wNuDcYNWIWQ."/index.php?op=l404" : "None found") ); include Il2qN32A6EeND.'class.templates.inc.php'; $kSqnsSOfXlo8ln = new kejdU2faYCAU("pages/mods/"); $kSqnsSOfXlo8ln->MddRgpIor(AQEJpzp83PVPuONNJ(zuXb1RhRl0, 'sitemap_notify.txt')); if(is_array($ea = unserialize($grab_parameters['xs_email_arepl']))){ $gf9IrCETA_riIl = array_merge($gf9IrCETA_riIl, $ea); } $kSqnsSOfXlo8ln->FOCpwyCaa1zV8ITF($gf9IrCETA_riIl); $qavYsvb7U31aFIKJR = $kSqnsSOfXlo8ln->parse(); preg_match('#^([^\r\n]*)\s*(.*)$#is', $qavYsvb7U31aFIKJR, $am); $nUL_T6a470Fqqn = $am[1]; $C629L4qvNEC = $am[2]; $C629L4qvNEC = preg_replace('#\r?\n#', "\r\n", $C629L4qvNEC); $qcHvzZE_cTnCJcmS = new AMgW7eeAIOl(); $qcHvzZE_cTnCJcmS->TonM0mzBvQc($grab_parameters['xs_email'], $nUL_T6a470Fqqn, $C629L4qvNEC, $gf9IrCETA_riIl['mail_from'] ? $gf9IrCETA_riIl['mail_from'] : $grab_parameters['xs_email'] ); } } $UFH0cYalshj8ilZw = new GenMail(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/pages/class.templates.inc.php b/generator/pages/class.templates.inc.php new file mode 100755 index 0000000..5e65808 --- /dev/null +++ b/generator/pages/class.templates.inc.php @@ -0,0 +1,201 @@ +contentTypes=array(); $this->varScope=array(); $this->tplPath = (dirname(__FILE__).'/../'.$c8hXHDB_uRoIpsh); $this->ts = implode('|', $this->tplTags); } function MddRgpIor($qavYsvb7U31aFIKJR, $MvE2_SORq = '') { $this->tplName = file_exists($this->tplPath . $qavYsvb7U31aFIKJR) ? $qavYsvb7U31aFIKJR : $MvE2_SORq; } function ZoknvuUYP($fGFFoS728V_xDAVeL,$MI4fNXKFtPGYv) { $this->varScope[$fGFFoS728V_xDAVeL]=$MI4fNXKFtPGYv; } function FOCpwyCaa1zV8ITF($vGg1894D_y7Zt5Q1M) { if($vGg1894D_y7Zt5Q1M) foreach($vGg1894D_y7Zt5Q1M as $k=>$v) $this->varScope[$k]=$v; } function btBwwZXxWS($dEiGIYwo7Srq3X,&$tl) { while(preg_match('#^(.*?)<(/?(?:'.$this->ts.'))\s*(.*?)>#is', $dEiGIYwo7Srq3X, $tm)){ $dEiGIYwo7Srq3X = substr($dEiGIYwo7Srq3X,strlen($tm[0])); $ta = array( 'pre'=>$tm[1], 'tag'=>strtolower($tm[2]), 'par'=>$tm[3], ); switch($ta['tag']){ case 'tif': case 'tloop': $dEiGIYwo7Srq3X = $this->btBwwZXxWS($dEiGIYwo7Srq3X,$ta['sub']); break; case '/tif': case '/tloop': $tl[] = $ta; return $dEiGIYwo7Srq3X; break; } $tl[] = $ta; } $tl[count($tl)-1]['post'] = $dEiGIYwo7Srq3X; return $dEiGIYwo7Srq3X; } function parse() { $dc_8ToqZV = implode("",file($this->tplPath.$this->tplName)); $NR3tQ8cMptFBaNs2 = $this->hoxrmfFginIYPn($dc_8ToqZV); $NR3tQ8cMptFBaNs2 = preg_replace("#\s*[\r\n]\s+#s","\n",$NR3tQ8cMptFBaNs2); return $NR3tQ8cMptFBaNs2; } function hoxrmfFginIYPn($q9XceTZtmgERYb,$VCV0eEYMG=0) { if(!$VCV0eEYMG)$VCV0eEYMG=$this->varScope; $tagsList = array(); $this->btBwwZXxWS($q9XceTZtmgERYb,$tagsList); $NR3tQ8cMptFBaNs2 = $this->Z17BHXaZcFYLa6pQZ($tagsList,$VCV0eEYMG); return $NR3tQ8cMptFBaNs2; } function ZBWGkqS6VQ71($q9XceTZtmgERYb,$LznKzm_jyusKNcyk) { $this->varScope=null; $this->FOCpwyCaa1zV8ITF($LznKzm_jyusKNcyk); return $this->hoxrmfFginIYPn($q9XceTZtmgERYb); } function Z17BHXaZcFYLa6pQZ($tl,$VCV0eEYMG=0,$dp=0,$sG53YQ0A72=true) { if(!$VCV0eEYMG)$VCV0eEYMG=$this->varScope; $VXo6vuQzCR=$sG53YQ0A72; $rt = ''; if(is_array($tl)) foreach($tl as $i=>$ta){ $pr=$ta['par']; if($VXo6vuQzCR){ $rt .= $ta['pre']; switch($ta['tag']){ case 'tloop': $D6IQA6CnCMx9RWf = $VCV0eEYMG[$pr]; $v1=$VCV0eEYMG['__index__']; $v2=$VCV0eEYMG['__value__']; for($i=0;$iZ17BHXaZcFYLa6pQZ( $ta['sub'], array_merge($VCV0eEYMG,is_array($D6IQA6CnCMx9RWf[$i])?$D6IQA6CnCMx9RWf[$i]:array()), $dp+1); } $VCV0eEYMG['__index__']=$v1; $VCV0eEYMG['__value__']=$v2; $rt .= $ta['post']; break; case 'tif': $rZR4QpdO3O0jnv5n1fa=$HT7yKXImq=$uujzGkq3Glugxaz7=0; $vablW4zqAwA=$pr; if(strstr($pr,'=')){ list($vablW4zqAwA,$T0gmFEXXIurPo)=explode('=',$pr); $HT7yKXImq=1; } if(strstr($pr,'%')){ list($vablW4zqAwA,$T0gmFEXXIurPo)=explode('%',$pr); $rZR4QpdO3O0jnv5n1fa=1; } if($pr[0] == '!'){ $pr = substr($pr, 1); $uujzGkq3Glugxaz7=1; } if(strstr($T0gmFEXXIurPo,'$'))$T0gmFEXXIurPo=$GLOBALS[str_replace('$','',$T0gmFEXXIurPo)]; if($VCV0eEYMG[$T0gmFEXXIurPo])$T0gmFEXXIurPo=$VCV0eEYMG[$T0gmFEXXIurPo]; $D6IQA6CnCMx9RWf = $VCV0eEYMG[$vablW4zqAwA]; if($ta['sub']) $rt .= $this->Z17BHXaZcFYLa6pQZ( $ta['sub'], $VCV0eEYMG, $dp+1, ($rZR4QpdO3O0jnv5n1fa?(($D6IQA6CnCMx9RWf%$T0gmFEXXIurPo)==0):($HT7yKXImq?($D6IQA6CnCMx9RWf==$T0gmFEXXIurPo):($uujzGkq3Glugxaz7?!$D6IQA6CnCMx9RWf:$D6IQA6CnCMx9RWf))) ); $rt .= $ta['post']; break; case 'tvar': $t = $VCV0eEYMG[$pr]; if(substr($pr,0,3)=='ue_')$t = urlencode($VCV0eEYMG[substr($pr,3)]); if($pr[0]=='$')$t=$GLOBALS[substr($pr,1)]; $rt .= $t; $rt .= $ta['post']; break; case 'tinc': $q9XceTZtmgERYb = implode("",file($this->tplPath.$pr)); $q9XceTZtmgERYb = $this->hoxrmfFginIYPn($q9XceTZtmgERYb,$VCV0eEYMG); $rt .= $q9XceTZtmgERYb; $rt .= $ta['post']; break; default: $rt .= $ta['post']; break; } } if($ta['tag']=='telse'){ $VXo6vuQzCR=!$VXo6vuQzCR; } } return $rt; } function TrDtPhboaRh() { $FGYTpafZsuRLWYq0=$this->parse(); echo $FGYTpafZsuRLWYq0; } } } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/pages/class.utils.inc.php b/generator/pages/class.utils.inc.php new file mode 100755 index 0000000..4643635 --- /dev/null +++ b/generator/pages/class.utils.inc.php @@ -0,0 +1,203 @@ + 15) pP9L3mrPigC(); $aQ4ElPDMjZqlA6eve = $ctime; if(!function_exists('getrusage'))return; if(!isset($I4xiiY8U2FMQjtAUzNB)){ $I4xiiY8U2FMQjtAUzNB = explode('|',$grab_parameters['xs_cpumon']); } if(!is_array($I4xiiY8U2FMQjtAUzNB)||!$I4xiiY8U2FMQjtAUzNB[0])return; $w21UPtIuo5RB0Crs = microtime(true); if(($haUwixsQMto=$w21UPtIuo5RB0Crs-$Azn3vphuaYE[1]) < $I4xiiY8U2FMQjtAUzNB[3])return; $IZiCYkziP_t0T0DX = getrusage(); $KSpBBj6usrOqMsPdHh = $IZiCYkziP_t0T0DX["ru_utime.tv_sec"] + $IZiCYkziP_t0T0DX["ru_utime.tv_usec"] / 1e6; $VGNz2mNQXx = 0; if($Azn3vphuaYE){ $qz46hf9qqkMLYqO = ($KSpBBj6usrOqMsPdHh - $Azn3vphuaYE[0]); $VGNz2mNQXx = 100 * $qz46hf9qqkMLYqO / $haUwixsQMto; } if($VGNz2mNQXx>$I4xiiY8U2FMQjtAUzNB[0]) { z_fhGrViQaOeql9("\n
    CPU monitor sleep: ".number_format($VGNz2mNQXx,2)."% (". number_format($qz46hf9qqkMLYqO,2)." / ".number_format($haUwixsQMto,2). " / ".number_format($w21UPtIuo5RB0Crs-$Azn3vphuaYE[2],2)." ) ". (number_format(memory_get_usage()/1024).'K')); $Azn3vphuaYE[2] = $w21UPtIuo5RB0Crs+$I4xiiY8U2FMQjtAUzNB[1]; sleep($I4xiiY8U2FMQjtAUzNB[1]); z_fhGrViQaOeql9(".. go\n
    "); }else if($haUwixsQMto > $I4xiiY8U2FMQjtAUzNB[2]) { $Azn3vphuaYE[0] = $KSpBBj6usrOqMsPdHh; $Azn3vphuaYE[1] = $w21UPtIuo5RB0Crs; } } function pP9L3mrPigC() { $GZCFp_txIxdI = array( ebJGVa__YE.smWzxPC1LKDbUte, ebJGVa__YE.Uv9x2nKq2xFMz ); RGVnCnecoCvEL7oyPH('Touch: '.ebJGVa__YE.smWzxPC1LKDbUte); foreach($GZCFp_txIxdI as $lg) { if(file_exists($lg)){ touch($lg); } } } function YQuOYEF3pgh7zsh($progpar) { global $naPDZDyR2SqyxQvp; if((time()-$naPDZDyR2SqyxQvp)>e6p6oz8D73L8('xs_state_interval',5)){ $naPDZDyR2SqyxQvp = time(); $progpar[] = fiJIJjF_yojaqa(); QNBZB8U2gUbUbMO(Uv9x2nKq2xFMz,G8ByTBG0gz4G9($progpar)); } } function PMVKiWGsLbTpXo0qagQ() { global $NTNwwUxSQ4XXmLyW7; $NTNwwUxSQ4XXmLyW7 = tMsFwxcfs9YfeVoHZkr(ebJGVa__YE.'debug.log','a'); z_fhGrViQaOeql9( str_repeat('=',60)."\n".date('Y-m-d H:i:s')."\n\n"); } function z_fhGrViQaOeql9($d9a1XR4MDwhKF3F, $ejZZGtpxc7E = '') { global $NTNwwUxSQ4XXmLyW7,$sAg5YsdwOc,$_udbg_tm; if(!$_udbg_tm)$_udbg_tm = microtime(true); $_t = number_format(microtime(true)-$_udbg_tm,1); $sMJakJpEUurc0 = $_GET['ddbg'.$ejZZGtpxc7E]; if($sMJakJpEUurc0){ if($NTNwwUxSQ4XXmLyW7){ c0plShyyY3($NTNwwUxSQ4XXmLyW7, strip_tags($d9a1XR4MDwhKF3F)); } echo $sAg5YsdwOc ? strip_tags($d9a1XR4MDwhKF3F) : '| '.$_t .' |
    '.$d9a1XR4MDwhKF3F; flush(); } } function jgYSLBDPtmpAo($pjWDjZIGXb1f) { global $grab_parameters; RGVnCnecoCvEL7oyPH('Del: '.$pjWDjZIGXb1f); if($grab_parameters['xs_filewmove'] && file_exists($pjWDjZIGXb1f) ){ $yyuArjDKyaNkyzyG = tempnam("/tmp", "sgtmp"); if(file_exists($yyuArjDKyaNkyzyG))unlink($yyuArjDKyaNkyzyG); if(file_exists($pjWDjZIGXb1f))rename($pjWDjZIGXb1f, $yyuArjDKyaNkyzyG); return !file_exists($yyuArjDKyaNkyzyG) || unlink($yyuArjDKyaNkyzyG); }else { return unlink($pjWDjZIGXb1f); } } function DXwTWcPx8gwRJFL($f){if(function_exists('file_get_contents'))return file_get_contents($f);else return implode('',file($f));} function tMsFwxcfs9YfeVoHZkr($pjWDjZIGXb1f, $ndeCxXhTNIt) { global $grab_parameters; RGVnCnecoCvEL7oyPH('Open for writing: '.$pjWDjZIGXb1f); if($grab_parameters['xs_filewmove'] && file_exists($pjWDjZIGXb1f) ){ $qZN2cRANbk1N = ($ndeCxXhTNIt == 'a') ? file_get_contents($pjWDjZIGXb1f) : ''; jgYSLBDPtmpAo($pjWDjZIGXb1f); $pf = fopen($pjWDjZIGXb1f, 'w'); if($qZN2cRANbk1N){ c0plShyyY3($pf, $qZN2cRANbk1N); } return $pf; } else { $pf = fopen($pjWDjZIGXb1f, 'w'); return $pf; } } function yiI3GJqLr5Z($pjWDjZIGXb1f) { return md5($pjWDjZIGXb1f); } function oL4Wd5vimhWp8DF0q($ygddcsZcedjzZC, $mEj2nSvdY) { $X586Srhrb7zbBwwaEu = QKL711IVYlu7s9YRPO . substr($ygddcsZcedjzZC,0,2) . '/'; if(!file_exists($X586Srhrb7zbBwwaEu)) mkdir($X586Srhrb7zbBwwaEu, 0755); $pf = tMsFwxcfs9YfeVoHZkr($X586Srhrb7zbBwwaEu . $ygddcsZcedjzZC.'.txt','w'); c0plShyyY3($pf, serialize($mEj2nSvdY)); fclose($pf); } function ZP4hlwyxMrCWr_v90($ygddcsZcedjzZC) { $fl = QKL711IVYlu7s9YRPO . substr($ygddcsZcedjzZC,0,2) . '/' . $ygddcsZcedjzZC . '.txt'; if(!file_exists($fl)) return array(); $q9XceTZtmgERYb = RWenvmRCuyBW($fl); return unserialize($q9XceTZtmgERYb); } function G8ByTBG0gz4G9($IZiCYkziP_t0T0DX) { global $grab_parameters; if($grab_parameters['xs_dumptype'] == 'var_export') return var_export($IZiCYkziP_t0T0DX,1); else return serialize($IZiCYkziP_t0T0DX); } function IcPgk0YCJ($IZiCYkziP_t0T0DX) { global $grab_parameters; if($grab_parameters['xs_dumptype'] != 'var_export') $tZg_hjVhRlGnXA = unserialize($IZiCYkziP_t0T0DX); else eval ($s='$tZg_hjVhRlGnXA = '.$IZiCYkziP_t0T0DX.';'); return $tZg_hjVhRlGnXA; } function joeXw9f7bW7PyEcEv($i,$Kd9n5bwrnd17vZn9U,$qNh0L3Iqq4xOGQ=false) { if($qNh0L3Iqq4xOGQ && $i<2) return $Kd9n5bwrnd17vZn9U; return $i ? preg_replace('#(.*)\.#','$01'.$i.'.',$Kd9n5bwrnd17vZn9U) : $Kd9n5bwrnd17vZn9U; } function QNBZB8U2gUbUbMO($pjWDjZIGXb1f, $JXrAUXdkHB6bEow, $GksHakkDnjml=ebJGVa__YE, $e6rLElc7C4 = false) { if($e6rLElc7C4 && function_exists('gzencode')){ $ee6xJLhs_ZF4V7QG = gzencode($JXrAUXdkHB6bEow, 1); unset($JXrAUXdkHB6bEow); $JXrAUXdkHB6bEow = $ee6xJLhs_ZF4V7QG; if(!strstr($pjWDjZIGXb1f,'.log')) $pjWDjZIGXb1f .= '.gz'; } $pf = tMsFwxcfs9YfeVoHZkr($GksHakkDnjml.$pjWDjZIGXb1f,"w"); c0plShyyY3($pf, $JXrAUXdkHB6bEow); fclose($pf); @chmod($GksHakkDnjml.$pjWDjZIGXb1f, 0666); unset($JXrAUXdkHB6bEow); return $pjWDjZIGXb1f; } function RWenvmRCuyBW($pjWDjZIGXb1f, $X73TkgN6YvHVm7YdDF = false) { if($X73TkgN6YvHVm7YdDF && file_exists($fn = $pjWDjZIGXb1f.'.gz')) $pjWDjZIGXb1f = $fn; RGVnCnecoCvEL7oyPH('Read: '.$pjWDjZIGXb1f); $fc = @file_get_contents($pjWDjZIGXb1f); if($X73TkgN6YvHVm7YdDF){ if((ord($fc[0])==0x1f)&&(ord($fc[1])==0x8b)){ if($bde7EoOvSY07vuMwIoK = gzinflate(substr($fc,10))) $fc = $bde7EoOvSY07vuMwIoK; } } return $fc; } function vNqieogz40S1ja($HVKGdDolsi2eMB_mMuD) { return @unserialize(RWenvmRCuyBW(ebJGVa__YE.$HVKGdDolsi2eMB_mMuD, true)); } function RGVnCnecoCvEL7oyPH($s) { } function wc_8d1gmEw3Z() { $EbecPh_o2 = array(); RGVnCnecoCvEL7oyPH('Get log list: '.ebJGVa__YE); $pd = opendir(ebJGVa__YE); while($fn=readdir($pd)) if(preg_match('#^\d+.*?\.log$#',$fn)) $EbecPh_o2[] = $fn; closedir($pd); sort($EbecPh_o2); return $EbecPh_o2; } function Dyz4i63tIZpcSycZz04($tm) { $tm = intval($tm); $h = intval($tm/60/60); $tm -= $h*60*60; $m = intval($tm/60); $tm -= $m*60; $s = $tm; if($s<10)$s="0$s"; if($m<10)$m="0$m"; return "$h:$m:$s"; } function YePgHxjTNXTAB($P0SEj2J9oLNRw2UOSi, $euDeOOfWG) { if(strstr($euDeOOfWG, '://'))return $euDeOOfWG; + if($P0SEj2J9oLNRw2UOSi[strlen($P0SEj2J9oLNRw2UOSi)-1] == '/' && $euDeOOfWG[0] == '/') $euDeOOfWG = substr($euDeOOfWG, 1); if($P0SEj2J9oLNRw2UOSi[strlen($P0SEj2J9oLNRw2UOSi)-1] == '/' && $P0SEj2J9oLNRw2UOSi[strlen($P0SEj2J9oLNRw2UOSi)-2] == '/' ) $P0SEj2J9oLNRw2UOSi = substr($P0SEj2J9oLNRw2UOSi, 0, strlen($P0SEj2J9oLNRw2UOSi)-1); return $P0SEj2J9oLNRw2UOSi . $euDeOOfWG; } function N_Fm0hhD3owWta(){ global $IIcbczWAX09NsrG, $KR2szlrmlyOMknrLO; $ctime = time(); if(($ctime - $IIcbczWAX09NsrG) > e6p6oz8D73L8('xs_interrupt_interval',3)){ $IIcbczWAX09NsrG = $ctime; if(file_exists($RvGpMMUREL77 = ebJGVa__YE.wLyh1d0ilMb)) $KR2szlrmlyOMknrLO = $RvGpMMUREL77; } return $KR2szlrmlyOMknrLO; } function e6p6oz8D73L8($GIeI0ZRU_, $F1JJx6h86dbaJkcg = false) { global $grab_parameters; return isset($grab_parameters[$GIeI0ZRU_]) ? $grab_parameters[$GIeI0ZRU_] : $F1JJx6h86dbaJkcg; } function A4sNJQoe6O47I_YC4($dr) { $dr = preg_replace('#\?.*#', '', $dr); $dr = preg_replace('#\#.*#', '', $dr); if($dr[strlen($dr)-1]!='/' && $dr) { $dr=str_replace('\\','/',dirname($dr)); if($dr[strlen($dr)-1]!='/')$dr.='/'; } return YePgHxjTNXTAB($dr, ''); } function bjmS1HQhkPEjp1QMl($Niq61B3f5T,$EYyBXYy9WWbLGYL5iQ) { return A4sNJQoe6O47I_YC4(strstr($EYyBXYy9WWbLGYL5iQ,'://') ? $EYyBXYy9WWbLGYL5iQ : $Niq61B3f5T . $EYyBXYy9WWbLGYL5iQ); + } function Znq7ffD8tRtK7G7k($GksHakkDnjml, $iXkV1DXrsnU) { RGVnCnecoCvEL7oyPH('Clear dir: '.$GksHakkDnjml); $pd = opendir($GksHakkDnjml); if($pd) while($fn = readdir($pd)) if(is_file($GksHakkDnjml.$fn) && preg_match('#'.$iXkV1DXrsnU.'$#',$fn)) { @jgYSLBDPtmpAo($GksHakkDnjml.$fn); }else if($fn[0]!='.'&&is_dir($GksHakkDnjml.$fn)) { Znq7ffD8tRtK7G7k($GksHakkDnjml.$fn.'/', $iXkV1DXrsnU); @rmdir($GksHakkDnjml.$fn); } closedir($pd); } function c0plShyyY3($pf, $q9XceTZtmgERYb) { global $grab_parameters; if($grab_parameters['xs_write_disable'] ){ } return @fwrite($pf, $q9XceTZtmgERYb); } function K95TS3G3r4UmuBQ6g($ka0IRxjBCkwNLQf, $lT0Vs3VxjBxAH3) { $ws = ""; foreach($lT0Vs3VxjBxAH3 as $k=>$v) if(strstr($k,'xs_')) $ws .= "\n\t"; $ws .= "\n"; $pf = tMsFwxcfs9YfeVoHZkr($ka0IRxjBCkwNLQf,'w'); c0plShyyY3($pf, $ws); fclose($pf); } function eiTxuqFQGsvY($ka0IRxjBCkwNLQf, &$lT0Vs3VxjBxAH3, $wlQYqEQ2Zw_3iFEC6q = false) { $fl = RWenvmRCuyBW($ka0IRxjBCkwNLQf); preg_match_all('##is', $fl, $Z59xLPPor0bYkq9kN2C, PREG_SET_ORDER); foreach($Z59xLPPor0bYkq9kN2C as $m) if(!$wlQYqEQ2Zw_3iFEC6q || $m[2]) { $lT0Vs3VxjBxAH3[$m[1]] = $m[2]; } return $fl && (count($Z59xLPPor0bYkq9kN2C)>0); } function sxtMVK6zQKt($GIeI0ZRU_, $uN1i2oP3IWzIFmI9lM = true) { global $grab_parameters, $ifLJ96S2XFSDmmWXE; return str_replace(basename($grab_parameters['xs_smurl']), $grab_parameters[$GIeI0ZRU_], $grab_parameters['xs_smurl']).($uN1i2oP3IWzIFmI9lM ? $ifLJ96S2XFSDmmWXE : ''); } function AQEJpzp83PVPuONNJ($GksHakkDnjml, $f2) { $f1 = preg_replace('#(\.[^\.]+$)#', '2$01', $f2); return @file_exists($GksHakkDnjml.$f1) ? $f1 : $f2; } function fiJIJjF_yojaqa() { global $CMQaGmG6s9sCBhxq; $D_ezG4BPksZTM79mUvk = '';$_ss=0; if($CMQaGmG6s9sCBhxq) foreach($CMQaGmG6s9sCBhxq as $os8tVH12X=>$ta){ if(count($ta)){ $_s = array_sum($ta)/count($ta); $_ss+=$_s; $D_ezG4BPksZTM79mUvk .= $os8tVH12X.' = '.number_format($_s,2)."s \n "; } } return '['.number_format($_ss,2).'s] '.$D_ezG4BPksZTM79mUvk; } function YHHPuGcJpxLDUfERty($os8tVH12X, $aCerQRayOa7vjcFtDKJ = false) { global $CMQaGmG6s9sCBhxq, $mHUAcr4HLXxz7; if(!isset($CMQaGmG6s9sCBhxq[$os8tVH12X])) $CMQaGmG6s9sCBhxq[$os8tVH12X] = array(); if($aCerQRayOa7vjcFtDKJ){ if($mHUAcr4HLXxz7[$os8tVH12X]){ $t = microtime(true) - $mHUAcr4HLXxz7[$os8tVH12X]; $mHUAcr4HLXxz7[$os8tVH12X] = 0; array_push($CMQaGmG6s9sCBhxq[$os8tVH12X], $t); if(count($CMQaGmG6s9sCBhxq[$os8tVH12X])>e6p6oz8D73L8('xs_perf_counter',20)) array_shift($CMQaGmG6s9sCBhxq[$os8tVH12X]); } }else { $mHUAcr4HLXxz7[$os8tVH12X] = microtime(true); } } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/pages/class.xml-creator.inc.php b/generator/pages/class.xml-creator.inc.php new file mode 100755 index 0000000..7639679 --- /dev/null +++ b/generator/pages/class.xml-creator.inc.php @@ -0,0 +1,532 @@ +$v){ if(!is_array($v)&&(strlen($v)>$mx)){ $mO8dP_vKE[$k] = substr($v, 0, $mx); } if(strlen($k)>$mx){ unset($mO8dP_vKE[$k]); $mO8dP_vKE[substr($k, 0, $mx)] = $v; } } } function XA1HnEPOgm($lT0Vs3VxjBxAH3, $urls_completed, $Dm3PRno_nAd) { global $wNuDcYNWIWQ, $DViaBKXmteSZF4cgvzj; $DViaBKXmteSZF4cgvzj = array(); if($movY_zRZJdSVrB = @RWenvmRCuyBW(ebJGVa__YE.'apicache.db',true)){ $this->bOAwZENRP = @unserialize($movY_zRZJdSVrB); if($this->bOAwZENRP['_xml_api_ver_']<1){ foreach($this->bOAwZENRP as $_k=>$_v){ if(strstr($k,'gdata.youtube')) unset($s[$k]); } $this->bOAwZENRP['_xml_api_ver_'] = 1; $this->NpOTWccEKPO7LjSMseh(true); } } $this->kSqnsSOfXlo8ln = new kejdU2faYCAU("pages/"); $this->lT0Vs3VxjBxAH3 = $lT0Vs3VxjBxAH3; $this->runstate = $Dm3PRno_nAd['runstate']; if($this->lT0Vs3VxjBxAH3['xs_chlog_list_max']) $this->ijCWcCzUwXPG = $this->lT0Vs3VxjBxAH3['xs_chlog_list_max']; $Kd9n5bwrnd17vZn9U = basename($this->lT0Vs3VxjBxAH3['xs_smname']); $this->uurl_p = dirname($this->lT0Vs3VxjBxAH3['xs_smurl']).'/'; $this->furl_p = dirname($this->lT0Vs3VxjBxAH3['xs_smname']).'/'; $this->imgno = 0; $this->ifLJ96S2XFSDmmWXE = ($this->lT0Vs3VxjBxAH3['xs_compress']==1) ? '.gz' : ''; $this->uTttAJYJzqs = $this->gs4Fbubikm9UoY = $this->urls_prevrss = array(); if($this->lT0Vs3VxjBxAH3['xs_chlog']) $this->uTttAJYJzqs = $this->Z0CT90Qqb49cBckp1($Kd9n5bwrnd17vZn9U); if($this->lT0Vs3VxjBxAH3['xs_rssinfo']) $this->urls_prevrss = $this->Z0CT90Qqb49cBckp1(vCm7s9tc6 , $this->lT0Vs3VxjBxAH3['xs_rssage'], false, 1); if($this->lT0Vs3VxjBxAH3['xs_newsinfo']) $this->gs4Fbubikm9UoY = $this->Z0CT90Qqb49cBckp1($this->lT0Vs3VxjBxAH3['xs_newsfilename'], $this->lT0Vs3VxjBxAH3['xs_newsage']); $gnPaX2YWE3M2x1s7 = $Vz1MJUA8RCHpI = array(); $this->h2yh1SOcTUdL4 = ($this->lT0Vs3VxjBxAH3['xs_compress']==1) ? array('fopen' => 'gzopen', 'fwrite' => 'gzwrite', 'fclose' => 'gzclose' ) : array('fopen' => 'tMsFwxcfs9YfeVoHZkr', 'fwrite' => 'c0plShyyY3', 'fclose' => 'fclose' ) ; $J0guAv8GXYn6AN38fxM = strstr($this->lT0Vs3VxjBxAH3['xs_initurl'],'://www.'); + $M80h6j1sEIWMK_ = $wNuDcYNWIWQ.'/'; if(strstr($this->lT0Vs3VxjBxAH3['xs_initurl'],'https:')) $M80h6j1sEIWMK_ = str_replace('http:', 'https:', $M80h6j1sEIWMK_); $XvU49oK_Vd = strstr($M80h6j1sEIWMK_,'://www.'); + $p1 = parse_url($this->lT0Vs3VxjBxAH3['xs_initurl']); $p2 = parse_url($M80h6j1sEIWMK_); if(str_replace('www.', '', $p1['host'])==str_replace('www.', '', $p2['host'])) { if($J0guAv8GXYn6AN38fxM && !$XvU49oK_Vd)$M80h6j1sEIWMK_ = str_replace('://', '://www.', $M80h6j1sEIWMK_); + if(!$J0guAv8GXYn6AN38fxM && $XvU49oK_Vd)$M80h6j1sEIWMK_ = str_replace('://www.', '://', $M80h6j1sEIWMK_); + } $this->lT0Vs3VxjBxAH3['gendom'] = $M80h6j1sEIWMK_; $this->gTrlEaHME($urls_completed, $gnPaX2YWE3M2x1s7); $this->I_bbCJVIyfD2x(); if($this->lT0Vs3VxjBxAH3['xs_chlog']) { $ZDRxZwYGC = array_keys($this->GyxaqkNpn); $q1Dhmf7aSwQAzPRIyD = array_slice(array_keys($this->uTttAJYJzqs), 0, $this->ijCWcCzUwXPG); } if($this->imgno)$this->aPeIhzjYj6iZvV[1]['xn'] = $this->imgno; if($this->videos_no)$this->aPeIhzjYj6iZvV[2]['xn'] = $this->videos_no; if($this->news_no)$this->aPeIhzjYj6iZvV[3]['xn'] = $this->news_no; $this->NETkCwdzdq6Pz0ny($ZDRxZwYGC); $this->NETkCwdzdq6Pz0ny($q1Dhmf7aSwQAzPRIyD); $this->NpOTWccEKPO7LjSMseh(true); $m6VWoP93i1XpwIg6 = array_merge($Dm3PRno_nAd, array( 'files' => array(), 'rinfo' => $this->aPeIhzjYj6iZvV, 'newurls' => $ZDRxZwYGC, 'losturls'=> $q1Dhmf7aSwQAzPRIyD, 'urls_ext'=> $Dm3PRno_nAd['urls_ext'], 'images_no' => $this->imgno, 'videos_no' => $this->videos_no, 'news_no' => $this->newsno, 'rss_no' => $this->rssno, 'rss_sm' => $this->lT0Vs3VxjBxAH3['xs_rssfilename'], 'fail_files' => $DViaBKXmteSZF4cgvzj, 'create_time' => time() )); unset($m6VWoP93i1XpwIg6['sm_base']); $PqrWr4MLtujWK1b_W = array('u404', 'urls_ext', 'urls_list_skipped', 'newurls', 'losturls'); foreach($PqrWr4MLtujWK1b_W as $ca) $this->NETkCwdzdq6Pz0ny($m6VWoP93i1XpwIg6[$ca]); $JFo3FYeR4sjMvbCM7lu = date('Y-m-d H-i-s').'.log'; QNBZB8U2gUbUbMO($JFo3FYeR4sjMvbCM7lu,serialize($m6VWoP93i1XpwIg6),ebJGVa__YE,true); $this->uTttAJYJzqs = $this->GyxaqkNpn = $this->gs4Fbubikm9UoY = $this->urls_prevrss = array(); $gnPaX2YWE3M2x1s7 = array(); return $m6VWoP93i1XpwIg6; } function XSfm7tvxuWOi84V($KDTEDseXOWMlsG){ if(!function_exists('iconv')) return $KDTEDseXOWMlsG; + + return + preg_replace_callback("/\\\\u([a-f0-9]{4})/", + create_function ('$matches', 'return iconv(\'UCS-4LE\',\'UTF-8\',pack(\'V\', hexdec(\'U\'.$matches[1])));') + ,$KDTEDseXOWMlsG); + + + +} function Wv2SmnmzlB($pf) { global $I8v4y5NCk0; if(!$pf)return; $this->h2yh1SOcTUdL4['fwrite']($pf, $I8v4y5NCk0[3]); $this->h2yh1SOcTUdL4['fclose']($pf); } function hPqMY1ez6oMQQl($pf, $os8tVH12X) { global $I8v4y5NCk0; if(!$pf)return; $xs = $this->kSqnsSOfXlo8ln->ZBWGkqS6VQ71($I8v4y5NCk0[1], array('TYPE'.$os8tVH12X=>true)); $this->h2yh1SOcTUdL4['fwrite']($pf, $xs); } function ZinuNHiYLZhtAywP2($Vz1MJUA8RCHpI) { $OqtGTVqoDwX = ""; $EE3JSA0ZP1y1fXkP = AQEJpzp83PVPuONNJ(zuXb1RhRl0, 'sitemap_index_tpl.xml'); $lrwBdRFrgSdhG = file_get_contents(zuXb1RhRl0.$EE3JSA0ZP1y1fXkP); preg_match('#^(.*)%SITEMAPS_LIST_FROM%(.*)%SITEMAPS_LIST_TO%(.*)$#is', $lrwBdRFrgSdhG, $lWQKrAn9z); $lWQKrAn9z[1] = str_replace('%GEN_URL%', $this->lT0Vs3VxjBxAH3['gendom'], $lWQKrAn9z[1]); $muP565NgXyQ = preg_replace('#[^\\/]+?\.xml$#', '', $this->lT0Vs3VxjBxAH3['xs_smurl']); $lWQKrAn9z[1] = str_replace('%SM_BASE%', $muP565NgXyQ, $lWQKrAn9z[1]); for($i=0;$ikSqnsSOfXlo8ln->ZBWGkqS6VQ71($lWQKrAn9z[2], array( 'URL'=>$Vz1MJUA8RCHpI[$i], 'LASTMOD'=>date('Y-m-d\TH:i:s+00:00') )); return $lWQKrAn9z[1] . $OqtGTVqoDwX . $lWQKrAn9z[3]; } function spA7fV5_CrBgFVbOJ($psf7nhFBQzfQO7, $e_ksHZ4mvyyb643a5V = false, $Ln7MhujXum6lIo2x = false) { if($e_ksHZ4mvyyb643a5V){ $t = $psf7nhFBQzfQO7; if(function_exists('utf8_encode') && !$this->lT0Vs3VxjBxAH3['xs_utf8']){ $t2=''; for($i=0;$i128) ? '&#'.ord($t[$i]).';' : $t[$i]); $t = $t2; $t = utf8_encode($t); $t = htmlentities($t,ENT_COMPAT,'UTF-8'); }else if($Ln7MhujXum6lIo2x){ $t = htmlentities($t, ENT_COMPAT, 'UTF-8'); } $t = preg_replace("#&(\#[\w\d]+;)#", '&$1', $t); $t = str_replace("&", "&", $t); $t = preg_replace("#&(?:amp;)+((\#\d+|gt|lt|quot|amp|apos|.uml);)#", '&$1', $t); $t = preg_replace('#[\x00-\x1F\x7F]#', ' ', $t); }else $t = str_replace("&", "&", $psf7nhFBQzfQO7); if(function_exists('utf8_encode') && !$this->lT0Vs3VxjBxAH3['xs_utf8']) { $t = utf8_encode($t); } return $t; } function Ink66j0Yx4uzSWU5($KkIiDw6iHW1n4Sy) { $KkIiDw6iHW1n4Sy = $this->spA7fV5_CrBgFVbOJ(str_replace(array(' '),array(''),$KkIiDw6iHW1n4Sy), true); return $KkIiDw6iHW1n4Sy; } function lnnGg7ZbD9_Q4X6($yFdoAFjhSYO4) { global $e_ksHZ4mvyyb643a5V; $l = str_replace("&", "&", $yFdoAFjhSYO4); $l = str_replace("&", "&", $l); $l = strtr($l, $e_ksHZ4mvyyb643a5V); +$l = preg_replace("#&(?:amp;)+((\#\d+|gt|lt|quot|amp|apos|.uml);)#", '&$1', $l); +if($this->lT0Vs3VxjBxAH3['xs_utf8']) { }else { if( $this->lT0Vs3VxjBxAH3['xs_url_charset_convert'] && $this->runstate['charset'] && function_exists('iconv') && (strpos($l,'%') === false) ) { if($l2 = iconv($this->runstate['charset'], 'UTF-8', $l)) { if($l != $l2){ $lp = urlencode($l2); $l = str_replace( array('%3A','%2F', '%3F', '%26', '%23', '%3B', '%3D'), array(':', '/', '?', '&', '#', ';', '='), $lp); } } } if(function_exists('utf8_encode')) $l = utf8_encode($l); } return $l; } function N4yuA2XEdnmwGMXLE4($Btu_OfIkMLszVD) { $nuBa9NbmEO6RBhcW = array( basename($this->lT0Vs3VxjBxAH3['xs_smname']), $this->lT0Vs3VxjBxAH3['xs_imgfilename'], $this->lT0Vs3VxjBxAH3['xs_videofilename'], $this->lT0Vs3VxjBxAH3['xs_newsfilename'], $this->lT0Vs3VxjBxAH3['xs_mobilefilename'], ); if($Btu_OfIkMLszVD['rinfo']) $this->aPeIhzjYj6iZvV = $Btu_OfIkMLszVD['rinfo']; foreach($this->O4zX7h7zYXsnn0 as $os8tVH12X=>$uOu1DWuwwQBrf) if($uOu1DWuwwQBrf) { $this->aPeIhzjYj6iZvV[$os8tVH12X]['sitemap_file'] = $nuBa9NbmEO6RBhcW[$os8tVH12X]; $this->aPeIhzjYj6iZvV[$os8tVH12X]['filenum'] = intval($Btu_OfIkMLszVD['istart']/$this->lYg1fh6INMq)+1; if(!$Btu_OfIkMLszVD['istart']) $this->bJhviH6UA($nuBa9NbmEO6RBhcW[$os8tVH12X]); } } function Ka_AEZ56jwB8MHjF() { global $DViaBKXmteSZF4cgvzj; $spK9ovsA7pQ = 0; $l = false; foreach($this->O4zX7h7zYXsnn0 as $os8tVH12X=>$uOu1DWuwwQBrf) { $ri = &$this->aPeIhzjYj6iZvV[$os8tVH12X]; $mv3YztXmDFiT = (($ri['xnp'] % $this->lYg1fh6INMq) == 0) && ($ri['xnp'] || !$ri['pf']); $l|=$mv3YztXmDFiT; if($this->sm_filesplit && $ri['xchs'] && $ri['xnp']) $mv3YztXmDFiT |= ($ri['xchs']/$ri['xnp']*($ri['xnp']+1)>$this->sm_filesplit); if( $mv3YztXmDFiT ) { $spK9ovsA7pQ++; $ri['xchs'] = $ri['xnp'] = 0; $this->Wv2SmnmzlB($ri['pf']); if($ri['filenum'] == 2) { if(!copy(ebJGVa__YE . $ri['sitemap_file'].$this->ifLJ96S2XFSDmmWXE, ebJGVa__YE.($_xu = joeXw9f7bW7PyEcEv(1,$ri['sitemap_file']).$this->ifLJ96S2XFSDmmWXE))) { $DViaBKXmteSZF4cgvzj[] = ebJGVa__YE.$_xu; } $ri['urls'][0] = $this->uurl_p . $_xu; } $vqwWkTUJajn2Dj = (($ri['filenum']>1) ? joeXw9f7bW7PyEcEv($ri['filenum'],$ri['sitemap_file']) :$ri['sitemap_file']) . $this->ifLJ96S2XFSDmmWXE; $ri['urls'][] = $this->uurl_p . $vqwWkTUJajn2Dj; $ri['filenum']++; $ri['pf'] = $this->h2yh1SOcTUdL4['fopen'](ebJGVa__YE.$vqwWkTUJajn2Dj,'w'); if(!$ri['pf']) $DViaBKXmteSZF4cgvzj[] = ebJGVa__YE.$vqwWkTUJajn2Dj; $this->hPqMY1ez6oMQQl($ri['pf'], $os8tVH12X); } } return $l; } function LXUQuxNDxlej9($W5IQ4GpZEAaCLw_Kty, $I8v4y5NCk0, $os8tVH12X) { $W5IQ4GpZEAaCLw_Kty['TYPE'.$os8tVH12X] = true; $ri = &$this->aPeIhzjYj6iZvV[$os8tVH12X]; if($ri['pf']) { $_xu = $this->kSqnsSOfXlo8ln->ZBWGkqS6VQ71($I8v4y5NCk0, $W5IQ4GpZEAaCLw_Kty); $ri['xchs'] += strlen($_xu); $ri['xn']++; $ri['xnp']++; $this->h2yh1SOcTUdL4['fwrite']($ri['pf'], $_xu); } } function UWn3c8XSJ() { foreach($this->aPeIhzjYj6iZvV as $os8tVH12X=>$ri) { $this->Wv2SmnmzlB($ri['pf']); } } function I_bbCJVIyfD2x() { foreach($this->O4zX7h7zYXsnn0 as $os8tVH12X=>$uOu1DWuwwQBrf) { $ri = &$this->aPeIhzjYj6iZvV[$os8tVH12X]; if(count($ri['urls'])>1) { $xf = $this->ZinuNHiYLZhtAywP2($ri['urls']); array_unshift($ri['urls'], $this->uurl_p.QNBZB8U2gUbUbMO($ri['sitemap_file'], $xf, ebJGVa__YE, ($this->lT0Vs3VxjBxAH3['xs_compress']==1)) ); } $this->RKwdWhsAFuDrxw3i6($ri['sitemap_file']); } } function NpOTWccEKPO7LjSMseh($KsTwDHjoXr = false) { if(($this->I_swi1gI_aFqiP + 30) < time() || $KsTwDHjoXr) { QNBZB8U2gUbUbMO('apicache.db',serialize($this->bOAwZENRP),ebJGVa__YE,true); $this->I_swi1gI_aFqiP = time(); } } function ctboMafhgvqDmuTRdSR($plZxxPxp7dp, $G2zCcihGLQl = false) { global $K5kCC5JoHjozL; z_fhGrViQaOeql9("\nVideo api: $plZxxPxp7dp, ".($this->bOAwZENRP[$plZxxPxp7dp]?'YES':'NO').", ".$this->bOAwZENRP[$plZxxPxp7dp]['code']); if(!isset($this->bOAwZENRP[$plZxxPxp7dp]) || !$this->bOAwZENRP[$plZxxPxp7dp] || (strstr($this->bOAwZENRP[$plZxxPxp7dp]['code'],'403') && !preg_match('#(private|authentication|invalid)#si',$this->bOAwZENRP[$plZxxPxp7dp]['content']) ) ){ $_tr=4; while($_tr>0){ $fd = $K5kCC5JoHjozL->fetch($plZxxPxp7dp, 0,true, false, '', array('skipip' => true,'anytype'=>true)); $_tr--; if(strstr($fd['code'],'200'))$_tr=0; else sleep(3); } $this->bOAwZENRP[$plZxxPxp7dp] = $fd; $this->NpOTWccEKPO7LjSMseh(); } $D_ezG4BPksZTM79mUvk = $this->bOAwZENRP[$plZxxPxp7dp]; if($G2zCcihGLQl && $D_ezG4BPksZTM79mUvk && function_exists('json_decode')) { $D_ezG4BPksZTM79mUvk ['decont'] = json_decode($D_ezG4BPksZTM79mUvk['content'], 1); } return $D_ezG4BPksZTM79mUvk; } function A9hh86ST6sAgjxx($juzl9VS3h_7) { return $WtUMZDMaR6ayGRcIX; } function gTrlEaHME($urls_completed, &$gnPaX2YWE3M2x1s7) { global $I8v4y5NCk0, $z45zMtoh5QPc, $TBuKj2tXyZ_L9p_A, $sm_proc_list, $Btu_OfIkMLszVD, $RZyWFyTrlgQw4x6gpG, $DViaBKXmteSZF4cgvzj; $TNm6SblxP = $this->lT0Vs3VxjBxAH3['xs_chlog']; $EE3JSA0ZP1y1fXkP = AQEJpzp83PVPuONNJ(zuXb1RhRl0, 'sitemap_xml_tpl.xml'); $lrwBdRFrgSdhG = file_get_contents(zuXb1RhRl0.$EE3JSA0ZP1y1fXkP); preg_match('#^(.*)%URLS_LIST_FROM%(.*)%URLS_LIST_TO%(.*)$#is', $lrwBdRFrgSdhG, $I8v4y5NCk0); $I8v4y5NCk0[1] = str_replace('www.xml-sitemaps.com', 'www.xml-sitemaps.com ('. dVANLaXfylWyj7.')', $I8v4y5NCk0[1]); $I8v4y5NCk0[1] = str_replace('%GEN_URL%', $this->lT0Vs3VxjBxAH3['gendom'], $I8v4y5NCk0[1]); $muP565NgXyQ = preg_replace('#[^\\/]+?\.xml$#', '', $this->lT0Vs3VxjBxAH3['xs_smurl']); $I8v4y5NCk0[1] = str_replace('%SM_BASE%', $muP565NgXyQ, $I8v4y5NCk0[1]); if($this->lT0Vs3VxjBxAH3['xs_disable_xsl']) $I8v4y5NCk0[1] = preg_replace('#<\?xml-stylesheet.*\?>#', '', $I8v4y5NCk0[1]); + if($this->lT0Vs3VxjBxAH3['xs_nobrand']){ + $I8v4y5NCk0[1] = str_replace('sitemap.xsl','sitemap_nb.xsl',$I8v4y5NCk0[1]); + $I8v4y5NCk0[1] = preg_replace('# +%URLS_LIST_FROM% + + + + %URLS_LIST_TO% + \ No newline at end of file diff --git a/generator/pages/mods/sitemap_nb.xsl b/generator/pages/mods/sitemap_nb.xsl new file mode 100755 index 0000000..10ac485 --- /dev/null +++ b/generator/pages/mods/sitemap_nb.xsl @@ -0,0 +1,199 @@ + + + + + + + + + +<xsl:if test="sm:urlset/sm:url/mobile:mobile">Mobile </xsl:if> +<xsl:if test="sm:urlset/sm:url/image:image">Images </xsl:if> +<xsl:if test="sm:urlset/sm:url/news:news">News </xsl:if> +<xsl:if test="sm:urlset/sm:url/video:video">Video </xsl:if> +XML Sitemap +<xsl:if test="sm:sitemapindex"> Index</xsl:if> + + + +
    +

    +Mobile +Images +News +Video +XML Sitemap Index

    +

    + + +Total sitemap files listed in this index: + + +Total URLs in this sitemap file: + + +

    + + + +
    + + + +
    + + + + + + + + + + + + + + + + + + +
    URLLast Modified
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    URLLast ModifiedChange FrequencyPriority
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + + + + + +
    + + + +
    + +
    diff --git a/generator/pages/mods/sitemap_notify.txt b/generator/pages/mods/sitemap_notify.txt new file mode 100755 index 0000000..2a60dbb --- /dev/null +++ b/generator/pages/mods/sitemap_notify.txt @@ -0,0 +1,42 @@ +Standalone Sitemap Generator Report +Hello, + +sitemap for your website has been updated. + + +Sitemap details +------------------------- +Sitemap created on: + +Processing time: s + +Pages indexed: +Crawled pages size: Mb + + +View Sitemaps +------------------------- + +XML Sitemap + + +Text Sitemap + + +ROR Sitemap + + +HTML Sitemap + + + + + +Broken Links +------------------------- + + + + +Thank you for using our Sitemap Generator +https://www.xml-sitemaps.com \ No newline at end of file diff --git a/generator/pages/mods/sitemap_ping.txt b/generator/pages/mods/sitemap_ping.txt new file mode 100755 index 0000000..c10f29a --- /dev/null +++ b/generator/pages/mods/sitemap_ping.txt @@ -0,0 +1,6 @@ +http://www.google.com/webmasters/tools/ping?sitemap= +http://search.yahooapis.com/SiteExplorerService/V1/ping?sitemap= +http://submissions.ask.com/ping?sitemap= +http://api.moreover.com/ping?u= +http://webmaster.live.com/ping.aspx?siteMap= +http://www.bing.com/webmaster/ping.aspx?siteMap= \ No newline at end of file diff --git a/generator/pages/mods/sitemap_ror_tpl.xml b/generator/pages/mods/sitemap_ror_tpl.xml new file mode 100755 index 0000000..ec13082 --- /dev/null +++ b/generator/pages/mods/sitemap_ror_tpl.xml @@ -0,0 +1,17 @@ + + + + ROR Sitemap for %INIT_URL% + ROR Sitemap + %INIT_URL% + %URLS_LIST_FROM% + + + <TVAR TITLE> + + + + sitemap + %URLS_LIST_TO% + + \ No newline at end of file diff --git a/generator/pages/mods/sitemap_rss_tpl.xml b/generator/pages/mods/sitemap_rss_tpl.xml new file mode 100755 index 0000000..86ce0fd --- /dev/null +++ b/generator/pages/mods/sitemap_rss_tpl.xml @@ -0,0 +1,23 @@ + + + + %FEED_TITLE% RSS Feed + %INIT_URL% + My Feed at %INIT_URL% + %BUILD_DATE% + %BUILD_DATE% + https://www.xml-sitemaps.com/ + +%URLS_LIST_FROM% + + <TVAR TITLE> + + + + +%URLS_LIST_TO% + + diff --git a/generator/pages/mods/sitemap_tpl.html b/generator/pages/mods/sitemap_tpl.html new file mode 100755 index 0000000..1a141e7 --- /dev/null +++ b/generator/pages/mods/sitemap_tpl.html @@ -0,0 +1,151 @@ + + + +Site Map <TVAR PAGE> - Generated by www.xml-sitemaps.com + + + + + + + + +
    +

    HTML Site Map

    +

    Homepage +Last updated: +
    +Total pages:

    + + +
    + +[] + +
    +
    + + + + + + + + +
    + + + +
         +
    pagespage
    + + + + + +
    +
    +
    +
    + +
    + +
    + +[] + +
    +
    + +
    + + diff --git a/generator/pages/mods/sitemap_xml_tpl.xml b/generator/pages/mods/sitemap_xml_tpl.xml new file mode 100755 index 0000000..2e5d19b --- /dev/null +++ b/generator/pages/mods/sitemap_xml_tpl.xml @@ -0,0 +1,45 @@ + + + + xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" + xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" + xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" + xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" + xsi:schemaLocation=" + http://www.sitemaps.org/schemas/sitemap/0.9 + http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> + +%URLS_LIST_FROM% + + + ="" href="" /> + + + + + + + + + + + + + + + + + + + + + + + + + + %URLS_LIST_TO% + \ No newline at end of file diff --git a/generator/pages/page-analyze.inc.php b/generator/pages/page-analyze.inc.php new file mode 100755 index 0000000..4fbc905 --- /dev/null +++ b/generator/pages/page-analyze.inc.php @@ -0,0 +1,219 @@ + +
    + +
    +
    +

    Analyze Site Structure

    + ifLJ96S2XFSDmmWXE = ($grab_parameters['xs_compress']==1) ? '.gz' : ''; $urls_list = $by9zdmWh_g->Z0CT90Qqb49cBckp1($Kd9n5bwrnd17vZn9U); $KpqQMAo204oEII = preg_replace('#/$#','',$Dm3PRno_nAd['initdir']); $t8rgs9a7d2FUS7l=$LgLI0zBLaiF=$oaLtuQx7VUYT=array(); $Mmgwc2AWMDx9PNr = str_replace(' ', '|', $grab_parameters['xs_angroups']); if(is_array($urls_list)) foreach($urls_list as $fWF3L71eqllSq=>$DUZrQcBoQ){ $pE0deENVttSkb8Hz = str_replace($KpqQMAo204oEII,'', $fWF3L71eqllSq); $pE0deENVttSkb8Hz = preg_replace('#\?.*#', '', $pE0deENVttSkb8Hz); B0bZK2_9KnR8WXXzmsf($pE0deENVttSkb8Hz); if($Mmgwc2AWMDx9PNr && preg_match('#('.$Mmgwc2AWMDx9PNr.')#is', $pE0deENVttSkb8Hz, $tqkt5joCT_wZgAl3z)){ B0bZK2_9KnR8WXXzmsf($tqkt5joCT_wZgAl3z[1].'/'); } } sort($oaLtuQx7VUYT); $IOVrd_HyNGxshZQSHJ = array($t8rgs9a7d2FUS7l,$LgLI0zBLaiF,$oaLtuQx7VUYT); QNBZB8U2gUbUbMO($EKet5ZJB6NXv7qwqA1, serialize($IOVrd_HyNGxshZQSHJ)); echo 'DONE
    '; }else list($t8rgs9a7d2FUS7l,$LgLI0zBLaiF,$oaLtuQx7VUYT) = @unserialize(RWenvmRCuyBW(ebJGVa__YE.$EKet5ZJB6NXv7qwqA1)); ?> +
    Site folders structure
    + +
    + +
    + 0?' style="display:none"':'').'>'; ksort($sl); $ls = $dh6mwOEumX3JD*2; foreach($sl as $sk=>$sn){ echo str_repeat(' ',$ls). ($sn['elem']?'[x]':''). ($Og4KRtb1cdnHxZIO89?''.$sk.'':$sk). str_repeat(' ',max(0,30-$ls-($sn['elem']?3:0)-strlen($sk))).' - '.$sn['cnt'].($sn['tcnt']>$sn['cnt']?' ('.$sn['tcnt'].')':'')."\n"; if($sn['elem']) BDURPicA56HxjrUUp($sn['elem'],$dh6mwOEumX3JD+1,$w63YMiTeLeUqIPT.$sk,$Og4KRtb1cdnHxZIO89); } echo ''; } function B0bZK2_9KnR8WXXzmsf($DpcfJunW664lc){ global $t8rgs9a7d2FUS7l,$LgLI0zBLaiF,$PumGiN59i; for($i=0;$i
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/pages/page-chlog.inc.php b/generator/pages/page-chlog.inc.php new file mode 100755 index 0000000..356459c --- /dev/null +++ b/generator/pages/page-chlog.inc.php @@ -0,0 +1,279 @@ + +
    +
    + Crawler logs +
    +
    + '; ?> + + ( + -) + +
    + +
    +
    + + > +

    ChangeLog

    +

    +
    New URLs ()
    + +
    Removed URLs ()
    + +
    Skipped URLs - crawled but not added in sitemap ()
    + + + + + + + + + + + + + + + Images';?> + Videos';?> + News';?> + RSS';?> + + $v)if(!is_array($v))$mCLWsUvskyIkaI8Ye[$k]+=$v;else $mCLWsUvskyIkaI8Ye[$k]+=count($v); ?> + + + + + + + + + + + + '.$Dm3PRno_nAd['images_no'].'';?> + '.$Dm3PRno_nAd['videos_no'].'';?> + '.$Dm3PRno_nAd['news_no'].'';?> + '.$Dm3PRno_nAd['rss_no'].'';?> + + + + + + + + + + + + + ';?> + ';?> + ';?> + ';?> + +
    NoDate/TimeIndexed pagesProcessed pagesSkipped pagesProc.timeBandwidthNew URLsRemoved URLsBroken links
    s
    Total-s Mb-
    + +
    + Datastorage folder is not writable: '.ebJGVa__YE.''; } if(!$grab_parameters['xs_is_demo'] && isset($_POST['save']) && is_writable(VrIhIZ2UGhCqDiv)){ $grab_parameters['xs_initurl'] = trim($_POST['initurl']); $grab_parameters['xs_freq'] = $_POST['freq']; $grab_parameters['xs_lastmod'] = $_POST['lastmod']; $grab_parameters['xs_lastmodtime'] = $_POST['lastmodtime']; $grab_parameters['xs_priority'] = $_POST['priority']; $grab_parameters['xs_autopriority'] = $_POST['autopriority']?1:0; $grab_parameters['xs_max_pages'] = $_POST['max_pages']; $grab_parameters['xs_max_depth'] = $_POST['max_depth']; $grab_parameters['xs_exec_time'] = $_POST['exec_time']; $grab_parameters['xs_memlimit'] = $_POST['mem_limit']; $grab_parameters['xs_savestate_time'] = $_POST['savestate_time']; $grab_parameters['xs_delay_req'] = $_POST['delay_req']; $grab_parameters['xs_delay_ms'] = $_POST['delay_ms']; $grab_parameters['xs_yping'] = $_POST['SgSv9EHvXQ8D']; $grab_parameters['xs_smname'] = $_POST['smname']; $grab_parameters['xs_excl_urls'] = $_POST['excl_urls']; $grab_parameters['xs_incl_urls'] = $_POST['incl_urls']; $grab_parameters['xs_noincl_urls'] = $_POST['noincl_urls']; $grab_parameters['xs_incl_only'] = $_POST['incl_only']; $grab_parameters['xs_parse_only'] = $_POST['parse_only']; $grab_parameters['xs_ind_attr'] = $_POST['ind_attr']; $grab_parameters['xs_weblog_ping'] = $_POST['weblogup']; $grab_parameters['xs_smurl'] = $_POST['smurl']; if($_POST['changepass']) { $grab_parameters['xs_login'] = trim($_POST['xslogin']); if($_POST['xspassword']!='-----') { $grab_parameters['xs_password'] = trim($_POST['xspassword']) ? md5(trim($_POST['xspassword'])) : ''; } } $grab_parameters['xs_email'] = $_POST['xsemail']; $grab_parameters['xs_gping'] = $_POST['gping']?1:0; $grab_parameters['xs_chlog'] = $_POST['gchlog']?1:0; $grab_parameters['xs_extlinks'] = $_POST['extlinks']?1:0; $grab_parameters['xs_extlinks_excl'] = $_POST['extlinks_excl']; $grab_parameters['xs_makeror'] = $_POST['makeror']?1:0; $grab_parameters['xs_maketxt'] = $_POST['maketxt']?1:0; if($sm_proc_list) foreach($sm_proc_list as $davTYrpwM_4COa) { $grab_parameters[$davTYrpwM_4COa->PgST6Al2IwhyJOjnP] = $_POST[$davTYrpwM_4COa->PgST6Al2IwhyJOjnP]?1:0; if($davTYrpwM_4COa->PgST6Al2IwhyJOjnP) $grab_parameters[$davTYrpwM_4COa->ZdD16fdro7T29] = $_POST[$davTYrpwM_4COa->ZdD16fdro7T29]; } $grab_parameters['xs_webinfo'] = $_POST['webinfo']?1:0; $grab_parameters['xs_makehtml'] = $_POST['makehtml']?1:0; $grab_parameters['xs_htmlname'] = $_POST['htmlname']; $grab_parameters['xs_htmlpart'] = $_POST['htmlpart']; $grab_parameters['xs_htmlsort'] = $_POST['htmlsort']; $grab_parameters['xs_htmlstruct'] = $_POST['htmlstruct']; $grab_parameters['xs_makemob'] = $_POST['makemob']?1:0; if($_POST['makemob']) { $grab_parameters['xs_mobilefilename'] = $_POST['mobilefilename']; $grab_parameters['xs_mobileincmask'] = $_POST['mobileincmask']; } $grab_parameters['xs_sm_size'] = $_POST['sm_size']; $grab_parameters['xs_sm_filesize'] = $_POST['sm_filesize']; $grab_parameters['xs_purgelogs'] = $_POST['purge']; $grab_parameters['xs_autoresume'] = $_POST['autoresume']; $grab_parameters['xs_ref_list_store'] = $_POST['ref_list_store']; $grab_parameters['xs_maxref'] = $_POST['maxref']; $grab_parameters['xs_no_cookies'] = $_POST['cookies']?0:1; $grab_parameters['xs_compress'] = intval($_POST['compress']) ; $grab_parameters['xs_usecurl'] = $_POST['usecurl']?1:0; $grab_parameters['xs_memsave'] = $_POST['memsave']?1:0; $grab_parameters['xs_inc_skip'] = '\.('.preg_replace('#\s+#','|',trim($_POST['incl'])).')'; $grab_parameters['xs_exc_skip'] = '\.('.preg_replace('#\s+#','|',trim($_POST['excl'])).')'; $grab_parameters['xs_ipconnection'] = $_POST['serveripaddr']; $grab_parameters['xs_angroups'] = $_POST['angroups']; $grab_parameters['xs_moreurls'] = $_POST['moreurls']; $grab_parameters['xs_allow_subdomains'] = $_POST['allow_subdomains']?1:0; $grab_parameters['xs_cleanpar'] = preg_replace('#\s+#','|',trim($_POST['cleanpar'])); $grab_parameters['xs_metadesc'] = $_POST['metadesc']?1:0; $grab_parameters['xs_canonical'] = $_POST['canonical']?1:0; $grab_parameters['xs_checkver'] = $_POST['checkver']?1:0; $grab_parameters['xs_disable_xsl'] = $_POST['xslon']?0:1; $grab_parameters['xs_nobrand'] = $_POST['nobrand']?1:0; $grab_parameters['xs_robotstxt'] = $_POST['robotson']?1:0; $grab_parameters['xs_hreflang'] = $_POST['hreflang']?1:0; $grab_parameters['xs_alt_lang'] = $_POST['alt_lang']; $grab_parameters['xs_utf8'] = $_POST['xsutf'] ? 1 : 0; $grab_parameters['xs_inc_ajax'] = $_POST['xsajax'] ? 1 : 0; $grab_parameters['xs_lastmod_notparsed'] = $_POST['lmnp']?1:0; $grab_parameters['xs_debug'] = $_POST['dbg']?1:0; $grab_parameters['xs_http_language'] = $_POST['http_language']; K95TS3G3r4UmuBQ6g(VrIhIZ2UGhCqDiv, $grab_parameters); $RrdMupUEihGpaCVq = 'Configuration has been saved'; } $EbecPh_o2 = wc_8d1gmEw3Z(); if(count($EbecPh_o2)>0){ $HVKGdDolsi2eMB_mMuD = array_pop($EbecPh_o2); $Dm3PRno_nAd = vNqieogz40S1ja($HVKGdDolsi2eMB_mMuD); } $Kd9n5bwrnd17vZn9U = $grab_parameters['xs_smname']; $ycoquoAP1UP30SR = ($grab_parameters['xs_compress']==1) ? '.gz' : ''; $lYg1fh6INMq = $grab_parameters['xs_sm_size'] ? $grab_parameters['xs_sm_size'] : 50000; for($i=0;$i$lYg1fh6INMq) ? joeXw9f7bW7PyEcEv($i+1,$Kd9n5bwrnd17vZn9U):$Kd9n5bwrnd17vZn9U).$ycoquoAP1UP30SR; if(!@is_writable($vqwWkTUJajn2Dj) && !@is_writable(dirname($vqwWkTUJajn2Dj)) ) { if($pf = @tMsFwxcfs9YfeVoHZkr($vqwWkTUJajn2Dj)) @fclose($pf); $S_eI6d2eaz8 .= '
    Sitemap file is not writable: '.$vqwWkTUJajn2Dj.''; } } if($sm_proc_list)foreach($sm_proc_list as $davTYrpwM_4COa) $S_eI6d2eaz8 .= $davTYrpwM_4COa->tvL6CyQwj(); $lYg1fh6INMq = $grab_parameters['xs_htmlpart']; $Kd9n5bwrnd17vZn9U = $grab_parameters['xs_htmlname']; for($i=0;$i$lYg1fh6INMq) ? joeXw9f7bW7PyEcEv($i+1,$Kd9n5bwrnd17vZn9U,true):$Kd9n5bwrnd17vZn9U); if(!is_writable($vqwWkTUJajn2Dj) && !is_writable(dirname($vqwWkTUJajn2Dj)) ) $S_eI6d2eaz8 .= '
    Sitemap file is not writable: '.$vqwWkTUJajn2Dj.''; } include Il2qN32A6EeND.'page-top.inc.php'; ?> +
    + +
    + Licensed to:
    + +
    + +
    + 1. General Parameters +
    +
    + Define website URL, sitemap filename and URL, sitemap types. +
    +
    + 2. Sitemap Entry Attributes +
    +
    + Pages update frequency, last modification time, priority and other attributes. +
    +
    + 3. Miscellaneous Settings +
    +
    + Login and password, email notification, compression, search engines pings etc. +
    +
    + 4. Narrow Indexed Pages Set +
    +
    + Exclude specific filenames, filetypes, folders etc. +
    +
    + 5. Crawler Limitations, Finetune +
    +
    + Limit sitemap size, links depth level, maximum running time etc. +
    +
    + 6. Advanced Settings +
    +
    + Server's IP address, session ID parameters etc. +
    +
    +
    + +
    + An error occured +
    +
    +
    ');?> +
    + + +
    + Note +
    +
    + +
    + +

    Configuration

    +
    + +
    Starting URL:
    + +
    + Please enter the full http address for your site, only + the links within the starting directory will be included. +
    Save sitemap to:
    + +
    + Please enter complete file name, including the path. Make sure that the file is existing and has write permissions allowed. +
    Hint: current path to Sitemap generator is: / +
    +
    Your Sitemap URL:
    + +

    +

    [-] Other Sitemap Types (click to collapse)

    +
    + (*) Note that any extra sitemap type will require additional resources to complete the process +
    Create XML Sitemap:
    + id="in11"> +
    Create Text Sitemap:
    + id="in122"> +
    Create ROR Sitemap:
    + id="in13"> +
    It will be stored in the same folder as XML sitemap, but with different filename: ror.xml +
    Create HTML Sitemap:
    + id="in12"> + +
    Create Images Sitemap: + + Not available - click here to order an add-on + +
    + +
    Create Video Sitemap: + + Not available - click here to order an add-on + +
    + +
    Create News Sitemap: + + Not available - click here to order an add-on + +
    + +
    Create RSS feed: + + Not available - click here to order an add-on + +
    + +
    Create Mobile Sitemap: +
    + id="mobinfo1" onclick="nGj0r0BbusL('sm_mob_div')"> + + +
    Create psf7nhFBQzfQO7?>:
    + PgST6Al2IwhyJOjnP]?'checked':''?> id="inPgST6Al2IwhyJOjnP;?>"> +
    M2NTRvh2tI529?> +
    PgST6Al2IwhyJOjnP]?'':' style="display:none"'?>> + Sitemap filename:
    + +
    + +
    +

    [-] Sitemap Entry Attributes (click to collapse)

    +
    +
    Change frequency:
    + +
    + This value indicates how frequently the content at a particular URL is likely to change. + + +
    Last modification:
    + type="radio" name="lastmod" value="0" id="lm1"> +
    type="radio" name="lastmod" value="1" id="lm2"> +
    type="radio" name="lastmod" value="2" id="lm3"> +
    type="radio" name="lastmod" value="3" id="lm4"> + +
    + The time the URL was last modified. You can let the generator set this field from your server's response headers or to specify your own date and time. + +
    Priority:
    + +
    + The priority of a particular URL relative to other pages on the same site. The value for this tag is a number between 0.0 and 1.0. + +
    Automatic Priority:
    + id="autopriority"> +
    Enable this option to automatically reduce priority depending on the page's depth level +
    Individual attributes:
    + +
    define specific frequency and priority attributes here in the following format: +
    "url substring,lastupdate YYYY-mm-dd,frequency,priority". +
    example: +
    page.php?product=,2005-11-14,monthly,0.9 +
    +
    +

    +
    +

    [-] Miscellaneous Settings (click to collapse)

    +
    +
    Require authorization to access generator interface:
    + + + +
    +
    Send email notifications:
    + +
    +
    Number of URLs per file in XML sitemap and maximum file size:
    + URLs per file, + Mb per file +
    (that may split your sitemap on multiple files) +
    Number of links per page and sort order in HTML sitemap:
    + + + +
    Compress sitemap using GZip:
    + type="radio" name="compress" value="0" id="comp0"> +
    + type="radio" name="compress" value="1" id="comp1"> +
    + type="radio" name="compress" value="2" id="comp2"> +
    Inform (ping) Search Engines upon completion (Google, Yahoo, Ask, Moreover, Live):
    + id="in2"> +
    +
    Send "weblogUpdate" type of Ping Notification to:
    + +
    Calculate changelog:
    + id="in3"> +
    please note that this option requires more resources to complete +
    Store the external links list:
    + id="inextlinks"> +
    this option increases memory usage +
    Excluding matching URLs:
    + +

    +
    +

    [-] Narrow Indexed Pages Set (click to collapse)

    +
    +
    Exclude from sitemap extensions:
    + +
    these URLs are NOT included in sitemap +
    Add directly in sitemap (do not parse) extensions:
    + +
    these URLs ARE included in sitemap, although not retrieved from server +
    Exclusion preset:
    + +
    changing this setting will automatically prepopulate the options below with preset data + +
    Exclude URLs: + noindex, nofollow +
    + +
    do NOT include URLs that contain these substrings, one string per line +
    Add directly in sitemap (do not parse) URLs: + index, nofollow +
    + +
    do not retrieve pages that contain these substrings in URL, but still INCLUDE them in sitemap +
    Crawl, but do not include URLs: + noindex, follow + new +
    + +
    crawl pages that contain these substrings in URL, but do NOT include them in sitemap +
    "Include ONLY" URLs: + index only matching +
    + +
    leave this field empty by default. Fill it if you would like to include into sitemap ONLY those URls that match the specified string, separate multiple matches with space. +
    +
    "Parse ONLY" URLs: + follow only matching
    + +
    leave this field empty by default. Fill it if you would like to parse (crawl) ONLY those URls that match the specified string, separate multiple matches with space. +
    +

    +
    +

    [-] Crawler Limitations, Finetune (click to collapse)

    +
    +
    Maximum pages:
    + +
    + This will limit the number of pages crawled. You can enter "0" value for unlimited crawling. + +
    + THIS IS A TRIAL VERSION of sitemap generator, it will NOT index more than 500 pages + +
    +
    Maximum depth level:
    + + "0" for unlimited +
    Maximum execution time, seconds:
    + + "0" for unlimited +
    Maximum memory usage, MB:
    + + "0" for default. Note: might not work depending on the server configuration. +
    Save the script state, every X seconds:
    + + this option allows to resume crawling operation if it was interrupted. "0" for no saves +
    Make a delay between requests, X seconds after each N requests:
    + s + after each + requests +
    This option allows to reduce the load on your webserver. "0" for no delay +
    +

    [-] Advanced Settings (click to collapse)

    +
    +
    Allow subdomains:
    + id="allow_subdomains1"> +
    Additional "Starting URLs":
    + +
    Support cookies:
    + id="cook1"> +
    Use robots.txt file:
    + id="rob1"> +
    Detect canonical URL meta tags:
    + id="can1"> +
    Crawl Ajax content:
    + id="aj3"> +
    + the site must comply with "crawlable ajax" specs + +
    Remove session ID from URLs:
    + +
    + common session parameters (separate with spaces): PHPSESSID, sid, osCsid +
    Include hreflang for language URLs in sitemap: + new +
    + id="can2"> +
    + automatically detect hreflang on crawled website, details +
    Custom alternative language pages: + new +
    + +
    Specify alternative language versions for your pages: enter your page URL followed by a list of language identifier with alternative URLs, example:
    + http://www.example.com/
    + de http://www.example.com/de/
    + es http://www.example.com/es/
    +
    +
    Custom Accept-Language http header + new
    + +
    Use IP address for crawling:
    + +
    Hint: SERVER[SERVER_ADDR] - +
    Use CURL extension for http requests:
    + id="curl1"> +
    Enable stylesheet for XML sitemap:
    + id="can2"> +
    Remove "Created by.." links from sitemap:
    + id="nobrand2"> +
    Store referring links: + new
    + id="reflinks2"> +
    this option increases memory usage +
    Maximum referring pages to store:
    + +
    max referring URLs per page +
    Site uses UTF-8 charset:
    + id="can3"> +
    Enable last-modification time tag for "not parsed" URLs:
    + id="lmnp1"> +
    + additional HTTP HEAD requests are required in this case +
    Extract meta description tag
    + id="inmetadesc"> +
    Note: this option may significantly increase memory usage and is not recommended for larger sitemaps +
    Minimize script memory usage:
    + id="memsave1"> +
    + this option may significantly increase crawling time +
    Monitor crawler window and automatically resume if it stops in X seconds:
    + +
    Show debug output when crawling:
    + id="dbg1"> +
    Check for new versions of sitemap generator:
    + id="checkver1"> +
    Purge log records older than X days:
    + +
    Custom groups for "analyze" tab:
    + +
    +
    +
    + +
    +
    + +
    + 0) { $pd = opendir(ebJGVa__YE); if($pd) while($fn = readdir($pd)) if(strstr($fn,'.proc')||strstr($fn,'.log')||strstr($fn,'sess_')) if(@filemtime(ebJGVa__YE.$fn)$lYg1fh6INMq)) ? joeXw9f7bW7PyEcEv(1,$Kd9n5bwrnd17vZn9U,true):$Kd9n5bwrnd17vZn9U); $grab_parameters['htmlurl']=isset($grab_parameters['xs_htmlurl']) ? $grab_parameters['xs_htmlurl'] : $JxNdRgLqv9xDy8.'/'.$vqwWkTUJajn2Dj; $sm_proc_list = array(); $pd = opendir(zuXb1RhRl0); while($fn = readdir($pd)) if(strstr($fn, 'inc.php')&& !strstr($fn, 'mobile.inc.php')) { @include_once zuXb1RhRl0.$fn; } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/pages/page-crawl.inc.php b/generator/pages/page-crawl.inc.php new file mode 100755 index 0000000..3707d3a --- /dev/null +++ b/generator/pages/page-crawl.inc.php @@ -0,0 +1,282 @@ +The "stop" signal has been sent to a crawler.Return to crawler page'; }else if(file_exists($fn=ebJGVa__YE.Uv9x2nKq2xFMz)&&(time()-filemtime($fn)<10*60)){ $g9mWWYIteSa7dD7=true; $Pg9z9L_vlxcCxaz = 1; } if($Pg9z9L_vlxcCxaz){ if($g9mWWYIteSa7dD7) echo '

    Crawling already in progress.
    Last log access time: '.date('Y-m-d H:i:s',@filemtime($fn)).'
    Click here to interrupt it.

    '; else { echo '

    Please wait. Sitemap generation in progress...

    '; if($_POST['bg']) echo '
    Please note! The script will run in the background until completion, even if browser window is closed.
    '; } ?> + + + +
    + + +
    + +
    +
    +

    Crawling

    +
    + +
    Run in background
    + + filemtime(ebJGVa__YE.smWzxPC1LKDbUte)) ){ $VhnoUcNFi9Q = @IcPgk0YCJ(RWenvmRCuyBW(ebJGVa__YE.AheSQAhNo9A7oMn, true)); } if(!$VhnoUcNFi9Q){ $AngxaIfOJ = @IcPgk0YCJ(RWenvmRCuyBW(ebJGVa__YE.smWzxPC1LKDbUte, true)); $VhnoUcNFi9Q = $AngxaIfOJ['progpar']; } ?> +
    Resume last session
    + +
    Click button below to start crawl manually:
    +
    + +
    +
    +

    Cron job setup

    + You can use the following command line to setup the cron job for sitemap generator: +
    /usr/bin/php
    +

    Web Cron setup

    + If you cannot setup a regular cron task on your server, you can try a web cron instead: +
    +
    + + + + + XML Sitemaps - Generation + + + + + + + + + + + +

    Already in progress. Current process state is displayed:

    + +
    + + Links depth: - + +
    + + Current page: - + +
    + + Pages added to sitemap: - + +
    + + Pages scanned: - (- KB) + +
    + + Pages left: - (+ - queued for the next depth level) + +
    + + Time passed: - + +
    + + Time left: - + +
    + + Memory usage: - + +
    + + + + An error occured: '.$ZVU_UotF9_jJp.''; $GLOBALS['sg_runerror'] = $K5tNFC_1maLKpxB1pd; } else echo $ZVU_UotF9_jJp; echo ' '; } if($g9mWWYIteSa7dD7){ $rc = @IcPgk0YCJ(RWenvmRCuyBW($fn)); jLo1X8O3OGZlDH54AjS($rc); return; } if(file_exists(ebJGVa__YE.wLyh1d0ilMb)) @jgYSLBDPtmpAo(ebJGVa__YE.wLyh1d0ilMb); $Dm3PRno_nAd = $P2_ltWpf5 = $X5pGy9XVxZmKajMLt->pJIy8HIUg(array( 'initurl'=>$grab_parameters['xs_initurl'], 'progress_callback'=>'jLo1X8O3OGZlDH54AjS', 'maxpg'=>$grab_parameters['xs_max_pages'], 'bgexec'=>$_REQUEST['bg'], 'resume'=>$_REQUEST['resume'], 'maxdepth'=>$grab_parameters['xs_max_depth'], ), $urls_completed ); QNBZB8U2gUbUbMO('sm_base.db',serialize($Dm3PRno_nAd['sm_base']),ebJGVa__YE,true); unset($Dm3PRno_nAd['sm_base']); if($Dm3PRno_nAd['errmsg']||$Dm3PRno_nAd['interrupt']){ j03RYa9bU3v7z_93eY('config', '', $Dm3PRno_nAd['interrupt']?'The process has been interrupted ('.$Dm3PRno_nAd['interrupt'].')':$Dm3PRno_nAd['errmsg']); return; } echo '

    Completed

    Total pages indexed: '.count($urls_completed)."\n"; echo '
    Creating sitemaps...'."\n"; if($grab_parameters['xs_chlog']) echo ' and calculating changelog...'."\n"; echo '
    '."\n"; flush(); $RZyWFyTrlgQw4x6gpG='xmlcreate.log'; $V15cq9dPNt8iS8='htmlcreate.log'; if($_REQUEST['resume']) { $Btu_OfIkMLszVD = @IcPgk0YCJ(RWenvmRCuyBW(ebJGVa__YE.$RZyWFyTrlgQw4x6gpG)); $Yqz1QyXnf8Zlfu9jU = @IcPgk0YCJ(RWenvmRCuyBW(ebJGVa__YE.$V15cq9dPNt8iS8)); } $grab_parameters['xs_ipconnection'] = ''; $Wo1WjLciOv3NRe = time(); if(!$Btu_OfIkMLszVD['done']) $Dm3PRno_nAd = $by9zdmWh_g->XA1HnEPOgm( $grab_parameters, $urls_completed, $Dm3PRno_nAd ); $CVbG7y3B2eZhts = time(); $Dm3PRno_nAd['xml_create_time'] = ($CVbG7y3B2eZhts - $spSCVOMAe); if($grab_parameters['xs_makehtml']) { include Il2qN32A6EeND.'class.html-creator.inc.php'; } $Dm3PRno_nAd['html_create_time'] = (time() - $CVbG7y3B2eZhts); @jgYSLBDPtmpAo(ebJGVa__YE.$RZyWFyTrlgQw4x6gpG); @jgYSLBDPtmpAo(ebJGVa__YE.$V15cq9dPNt8iS8); global $DViaBKXmteSZF4cgvzj; if($DViaBKXmteSZF4cgvzj) { $ZVU_UotF9_jJp = nl2br("Error writing to these files:\n". ''.htmlspecialchars(implode("\n", $DViaBKXmteSZF4cgvzj)).''."\nPlease correct files permissions and resume sitemap creation." ); j03RYa9bU3v7z_93eY('config','',$ZVU_UotF9_jJp); return; }else { @jgYSLBDPtmpAo(ebJGVa__YE.smWzxPC1LKDbUte); } jLo1X8O3OGZlDH54AjS(array('flush'=>1)); if(!$grab_parameters['xs_chlog'] || $Dm3PRno_nAd['newurls'] || $Dm3PRno_nAd['losturls']) { if($grab_parameters['xs_gping']) $YF0XpEM2w4->gD2gJih5je9Dh($Dm3PRno_nAd['rinfo']); jLo1X8O3OGZlDH54AjS(array('flush'=>1)); if($grab_parameters['xs_weblog_ping']) { $yvOIe0tV6y4KcO0aLl = isset($urls_completed[0]['t']) ? $urls_completed[0]['t'] : ''; $YF0XpEM2w4->Z1gq78juXl150LtnVs($grab_parameters['xs_weblog_ping'], $grab_parameters['xs_initurl'], $yvOIe0tV6y4KcO0aLl); } jLo1X8O3OGZlDH54AjS(array('flush'=>1)); } if($grab_parameters['xs_email']) { echo '
    Sending email notification...';flush(); include Il2qN32A6EeND.'class.mail.inc.php'; $UFH0cYalshj8ilZw->moLbvHVqFXK8OJ($Dm3PRno_nAd); } jLo1X8O3OGZlDH54AjS(array('flush'=>1)); if($_GET['ddbgexit2'])exit; j03RYa9bU3v7z_93eY('view','
    Done, redirecting to sitemap view page.'); return; function jLo1X8O3OGZlDH54AjS($progpar) { global $sAg5YsdwOc, $GXcwrWDZ8PYz, $lJ4UjiHGEoOL92XF3oE, $uW2s6L508AR, $grab_parameters; if($progpar['cmd'] == 'info') { if(!$sAg5YsdwOc) if($uW2s6L508AR[$progpar['id']] != $progpar['text']) { if($progpar['text']) echo ""; else echo ""; flush(); $uW2s6L508AR[$progpar['id']] = $progpar['text']; } $progpar['cmd'] = 'ping'; } if($progpar['cmd'] == 'ping') { if(!$sAg5YsdwOc) echo "";flush(); }else if(!$progpar['cmd'] && !$_REQUEST['noddbg']) { list( $ctime, $sfWFJIHHoHQFy, $HBsKYMirP, $pn, $tsize, $links_level, $mu, $Ve5h8i9QJ3ta, $l2 ) = $progpar; $Jq0UrEsUPNB_qax = $pn?($HBsKYMirP/$pn)*$ctime:0; $WahZM9_a7TpWjlRj1kd = intval(str_replace(',','',$mu)); if($sAg5YsdwOc) echo "$pn | $HBsKYMirP | ".number_format($tsize/1024,1)." | ".Dyz4i63tIZpcSycZz04($ctime). " | ".Dyz4i63tIZpcSycZz04($Jq0UrEsUPNB_qax)." | $links_level | $mu | $Ve5h8i9QJ3ta | $l2 | ".($WahZM9_a7TpWjlRj1kd-$GXcwrWDZ8PYz)."\n"; else echo " "; } if((time()-$lJ4UjiHGEoOL92XF3oE)>min(20,$grab_parameters['xs_autoresume']-15) || $progpar['flush']) { $lJ4UjiHGEoOL92XF3oE = time(); if(!$sAg5YsdwOc) echo ""; flush(); } $GXcwrWDZ8PYz=$WahZM9_a7TpWjlRj1kd; flush(); } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/pages/page-ext.inc.php b/generator/pages/page-ext.inc.php new file mode 100755 index 0000000..fa78988 --- /dev/null +++ b/generator/pages/page-ext.inc.php @@ -0,0 +1,219 @@ + +
    +

    External Links

    + + + + + + + $Y6Sv9w6omZ){ ?> + + + + + + +
    NoExternal LinkReferred From
    +
    + '7.1', 'lastupdate'=>'2015-05-19', 'link'=>'https://www.xml-sitemaps.com/news-20150519.html' + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/pages/page-l404.inc.php b/generator/pages/page-l404.inc.php new file mode 100755 index 0000000..eadfe23 --- /dev/null +++ b/generator/pages/page-l404.inc.php @@ -0,0 +1,228 @@ + +
    +

    Broken Links

    + + + + + + + + + + + + + + +
    NoBroken Link (Code 404)Referred from
    + $v){ if($k)echo ', '; if(!$v)$v='/'; ?> +
    + +

    + This feature is not available in TRIAL version of sitemap generator.


    + You can order unlimited sitemap generator here: Full version of sitemap generator. +

    + +
    + +
    +
    +
    +

    Login

    + Login incorrect
    '; ?> +
    + +
    Username:
    + +
    Password:
    + +
    + +
    +
    +
    + +
    +

    Referring Links

    + + + + + + + + $ll){ ?> + + + + + + +
    NoPage URLReferred from
    + $v){ if($k)echo ', '; if(!$v)$v='/'; ?> +
    + +

    + This feature is not available in TRIAL version of sitemap generator.


    + You can order unlimited sitemap generator here: Full version of sitemap generator. +

    + +
    + 0){ $HVKGdDolsi2eMB_mMuD = array_pop($EbecPh_o2); @set_time_limit(60*60); $Dm3PRno_nAd = vNqieogz40S1ja($HVKGdDolsi2eMB_mMuD); if(filesize(ebJGVa__YE.$HVKGdDolsi2eMB_mMuD)>2000000) { $Dm3PRno_nAd['newurls'] = $Dm3PRno_nAd['losturls'] = $Dm3PRno_nAd['aproc'] = array(); QNBZB8U2gUbUbMO($HVKGdDolsi2eMB_mMuD,serialize($Dm3PRno_nAd)); } ?> +
    + Sitemap details +
    +
    + Created on:
    +
    + Processing time:
    + s
    + Pages indexed:
    +
    + Download:
    + XML sitemap + +
    In text format + + +
    + In ROR format + + + +
    + HTML sitemap + +

    + Mobile sitemap
    '.intval($Dm3PRno_nAd['ucount']).' pages
    '; ?> + PgST6Al2IwhyJOjnP]) echo '
    '.$davTYrpwM_4COa->psf7nhFBQzfQO7.''; ?> +
    more details » + +
    + +
    + Broken links +
    +
    + broken links found! +
    View the list. +
    + +
    + No sitemaps found +
    +
    + Sitemap was not generated yet, please go to Crawling + page to start crawler manually or to setup a cron job. +
    + 'Configuration', 'crawl'=>'Crawling', 'view'=>'View Sitemap', 'analyze'=>'Analyze Sitemap', 'chlog'=>'Site Change Log', 'l404'=>'Broken Links', 'reflinks'=>'Referrers', 'ext'=>'External Links', ); $ZKHrdYpZx7xJpCetjV=$eivnFROHnEo0qZ[$op]; include Il2qN32A6EeND.'page-generator.inc.php'; ?> + + + <?php echo $ZKHrdYpZx7xJpCetjV;?>: XML, ROR, Text, HTML Sitemap Generator - (c) www.xml-sitemaps.com + + + + + +
    + +
    +

    + + Standalone Sitemap Generator + + Standalone Sitemap Generator (Trial Version) +
    + Expires in days. Limited to max 500 URLs in sitemap. + +

    + +
    + XML_TFIN)) { ?> +

    Trial version expired

    +

    + You can order unlimited sitemap generator here: Full version of sitemap generator. +

    + +
    + +
    +
    +

    View Sitemap

    +
    HTML SiteMap
    +

    +
    Text SiteMap
    +

    +
    ROR SiteMap
    +

    + $ri) { $Dm3PRno_nAd['files'] = @array_merge($Dm3PRno_nAd['files'], $ri['urls']); } } for($i=0;$i1; $qZN2cRANbk1N = strstr($fl,'.gz')?implode('',gzfile($fl)):RWenvmRCuyBW($fl); ?> +
    . XML SiteMap
    +

    +

    + + +
    + + * + * @link http://www.yiiframework.com/ + * @copyright Copyright (c) 2008 Yii Software LLC + * @license http://www.yiiframework.com/license/ + */ + +if (!extension_loaded('openssl')) { + die('The OpenSSL PHP extension is required by Yii2.'); +} + +$params = getParams(); +$root = str_replace('\\', '/', __DIR__); +$envs = require("$root/environments/index.php"); +$envNames = array_keys($envs); + +echo "Yii Application Initialization Tool v1.0\n\n"; + +$envName = null; +if (empty($params['env']) || $params['env'] === '1') { + echo "Which environment do you want the application to be initialized in?\n\n"; + foreach ($envNames as $i => $name) { + echo " [$i] $name\n"; + } + echo "\n Your choice [0-" . (count($envs) - 1) . ', or "q" to quit] '; + $answer = trim(fgets(STDIN)); + + if (!ctype_digit($answer) || !in_array($answer, range(0, count($envs) - 1))) { + echo "\n Quit initialization.\n"; + exit(0); + } + + if (isset($envNames[$answer])) { + $envName = $envNames[$answer]; + } +} else { + $envName = $params['env']; +} + +if (!in_array($envName, $envNames)) { + $envsList = implode(', ', $envNames); + echo "\n $envName is not a valid environment. Try one of the following: $envsList. \n"; + exit(2); +} + +$env = $envs[$envName]; + +if (empty($params['env'])) { + echo "\n Initialize the application under '{$envNames[$answer]}' environment? [yes|no] "; + $answer = trim(fgets(STDIN)); + if (strncasecmp($answer, 'y', 1)) { + echo "\n Quit initialization.\n"; + exit(0); + } +} + +echo "\n Start initialization ...\n\n"; +$files = getFileList("$root/environments/{$env['path']}"); +if (isset($env['skipFiles'])) { + $skipFiles = $env['skipFiles']; + array_walk($skipFiles, function(&$value) use($env, $root) { $value = "$root/$value"; }); + $files = array_diff($files, array_intersect_key($env['skipFiles'], array_filter($skipFiles, 'file_exists'))); +} +$all = false; +foreach ($files as $file) { + if (!copyFile($root, "environments/{$env['path']}/$file", $file, $all, $params)) { + break; + } +} + +$callbacks = ['setCookieValidationKey', 'setWritable', 'setExecutable', 'createSymlink']; +foreach ($callbacks as $callback) { + if (!empty($env[$callback])) { + $callback($root, $env[$callback]); + } +} + +echo "\n ... initialization completed.\n\n"; + +function getFileList($root, $basePath = '') +{ + $files = []; + $handle = opendir($root); + while (($path = readdir($handle)) !== false) { + if ($path === '.git' || $path === '.svn' || $path === '.' || $path === '..') { + continue; + } + $fullPath = "$root/$path"; + $relativePath = $basePath === '' ? $path : "$basePath/$path"; + if (is_dir($fullPath)) { + $files = array_merge($files, getFileList($fullPath, $relativePath)); + } else { + $files[] = $relativePath; + } + } + closedir($handle); + return $files; +} + +function copyFile($root, $source, $target, &$all, $params) +{ + if (!is_file($root . '/' . $source)) { + echo " skip $target ($source not exist)\n"; + return true; + } + if (is_file($root . '/' . $target)) { + if (file_get_contents($root . '/' . $source) === file_get_contents($root . '/' . $target)) { + echo " unchanged $target\n"; + return true; + } + if ($all) { + echo " overwrite $target\n"; + } else { + echo " exist $target\n"; + echo " ...overwrite? [Yes|No|All|Quit] "; + + + $answer = !empty($params['overwrite']) ? $params['overwrite'] : trim(fgets(STDIN)); + if (!strncasecmp($answer, 'q', 1)) { + return false; + } else { + if (!strncasecmp($answer, 'y', 1)) { + echo " overwrite $target\n"; + } else { + if (!strncasecmp($answer, 'a', 1)) { + echo " overwrite $target\n"; + $all = true; + } else { + echo " skip $target\n"; + return true; + } + } + } + } + file_put_contents($root . '/' . $target, file_get_contents($root . '/' . $source)); + return true; + } + echo " generate $target\n"; + @mkdir(dirname($root . '/' . $target), 0777, true); + file_put_contents($root . '/' . $target, file_get_contents($root . '/' . $source)); + return true; +} + +function getParams() +{ + $rawParams = []; + if (isset($_SERVER['argv'])) { + $rawParams = $_SERVER['argv']; + array_shift($rawParams); + } + + $params = []; + foreach ($rawParams as $param) { + if (preg_match('/^--(\w+)(=(.*))?$/', $param, $matches)) { + $name = $matches[1]; + $params[$name] = isset($matches[3]) ? $matches[3] : true; + } else { + $params[] = $param; + } + } + return $params; +} + +function setWritable($root, $paths) +{ + foreach ($paths as $writable) { + if (is_dir("$root/$writable")) { + echo " chmod 0777 $writable\n"; + @chmod("$root/$writable", 0777); + } else { + echo "\n Error. Directory $writable does not exist. \n"; + } + } +} + +function setExecutable($root, $paths) +{ + foreach ($paths as $executable) { + echo " chmod 0755 $executable\n"; + @chmod("$root/$executable", 0755); + } +} + +function setCookieValidationKey($root, $paths) +{ + foreach ($paths as $file) { + echo " generate cookie validation key in $file\n"; + $file = $root . '/' . $file; + $length = 32; + $bytes = openssl_random_pseudo_bytes($length); + $key = strtr(substr(base64_encode($bytes), 0, $length), '+/=', '_-.'); + $content = preg_replace('/(("|\')cookieValidationKey("|\')\s*=>\s*)(""|\'\')/', "\\1'$key'", file_get_contents($file)); + file_put_contents($file, $content); + } +} + +function createSymlink($root, $links) { + foreach ($links as $link => $target) { + echo " symlink " . $root . "/" . $target . " " . $root . "/" . $link . "\n"; + //first removing folders to avoid errors if the folder already exists + @rmdir($root . "/" . $link); + @symlink($root . "/" . $target, $root . "/" . $link); + } +} diff --git a/init.bat b/init.bat new file mode 100755 index 0000000..2ade505 --- /dev/null +++ b/init.bat @@ -0,0 +1,20 @@ +@echo off + +rem ------------------------------------------------------------- +rem Yii command line init script for Windows. +rem +rem @author Qiang Xue +rem @link http://www.yiiframework.com/ +rem @copyright Copyright (c) 2008 Yii Software LLC +rem @license http://www.yiiframework.com/license/ +rem ------------------------------------------------------------- + +@setlocal + +set YII_PATH=%~dp0 + +if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe + +"%PHP_COMMAND%" "%YII_PATH%init" %* + +@endlocal diff --git a/requirements.php b/requirements.php new file mode 100755 index 0000000..aa93439 --- /dev/null +++ b/requirements.php @@ -0,0 +1,132 @@ +Error'; + echo '

    The path to yii framework seems to be incorrect.

    '; + echo '

    You need to install Yii framework via composer or adjust the framework path in file ' . basename(__FILE__) . '.

    '; + echo '

    Please refer to the README on how to install Yii.

    '; +} + +require_once($frameworkPath . '/requirements/YiiRequirementChecker.php'); +$requirementsChecker = new YiiRequirementChecker(); + +$gdMemo = $imagickMemo = 'Either GD PHP extension with FreeType support or ImageMagick PHP extension with PNG support is required for image CAPTCHA.'; +$gdOK = $imagickOK = false; + +if (extension_loaded('imagick')) { + $imagick = new Imagick(); + $imagickFormats = $imagick->queryFormats('PNG'); + if (in_array('PNG', $imagickFormats)) { + $imagickOK = true; + } else { + $imagickMemo = 'Imagick extension should be installed with PNG support in order to be used for image CAPTCHA.'; + } +} + +if (extension_loaded('gd')) { + $gdInfo = gd_info(); + if (!empty($gdInfo['FreeType Support'])) { + $gdOK = true; + } else { + $gdMemo = 'GD extension should be installed with FreeType support in order to be used for image CAPTCHA.'; + } +} + +/** + * Adjust requirements according to your application specifics. + */ +$requirements = array( + // Database : + array( + 'name' => 'PDO extension', + 'mandatory' => true, + 'condition' => extension_loaded('pdo'), + 'by' => 'All DB-related classes', + ), + array( + 'name' => 'PDO SQLite extension', + 'mandatory' => false, + 'condition' => extension_loaded('pdo_sqlite'), + 'by' => 'All DB-related classes', + 'memo' => 'Required for SQLite database.', + ), + array( + 'name' => 'PDO MySQL extension', + 'mandatory' => false, + 'condition' => extension_loaded('pdo_mysql'), + 'by' => 'All DB-related classes', + 'memo' => 'Required for MySQL database.', + ), + array( + 'name' => 'PDO PostgreSQL extension', + 'mandatory' => false, + 'condition' => extension_loaded('pdo_pgsql'), + 'by' => 'All DB-related classes', + 'memo' => 'Required for PostgreSQL database.', + ), + // Cache : + array( + 'name' => 'Memcache extension', + 'mandatory' => false, + 'condition' => extension_loaded('memcache') || extension_loaded('memcached'), + 'by' => 'MemCache', + 'memo' => extension_loaded('memcached') ? 'To use memcached set MemCache::useMemcached to true.' : '' + ), + array( + 'name' => 'APC extension', + 'mandatory' => false, + 'condition' => extension_loaded('apc'), + 'by' => 'ApcCache', + ), + // CAPTCHA: + array( + 'name' => 'GD PHP extension with FreeType support', + 'mandatory' => false, + 'condition' => $gdOK, + 'by' => 'Captcha', + 'memo' => $gdMemo, + ), + array( + 'name' => 'ImageMagick PHP extension with PNG support', + 'mandatory' => false, + 'condition' => $imagickOK, + 'by' => 'Captcha', + 'memo' => $imagickMemo, + ), + // PHP ini : + 'phpExposePhp' => array( + 'name' => 'Expose PHP', + 'mandatory' => false, + 'condition' => $requirementsChecker->checkPhpIniOff("expose_php"), + 'by' => 'Security reasons', + 'memo' => '"expose_php" should be disabled at php.ini', + ), + 'phpAllowUrlInclude' => array( + 'name' => 'PHP allow url include', + 'mandatory' => false, + 'condition' => $requirementsChecker->checkPhpIniOff("allow_url_include"), + 'by' => 'Security reasons', + 'memo' => '"allow_url_include" should be disabled at php.ini', + ), + 'phpSmtp' => array( + 'name' => 'PHP mail SMTP', + 'mandatory' => false, + 'condition' => strlen(ini_get('SMTP')) > 0, + 'by' => 'Email sending', + 'memo' => 'PHP mail SMTP server required', + ), +); +$requirementsChecker->checkYii()->check($requirements)->render(); diff --git a/ror.xml b/ror.xml new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/ror.xml diff --git a/test.php b/test.php new file mode 100755 index 0000000..7d9455a --- /dev/null +++ b/test.php @@ -0,0 +1,2 @@ +test + Privet \ No newline at end of file diff --git a/test.txt b/test.txt new file mode 100755 index 0000000..6010b27 --- /dev/null +++ b/test.txt @@ -0,0 +1 @@ +fdsfadsfdsf \ No newline at end of file diff --git a/tests/README.md b/tests/README.md new file mode 100755 index 0000000..5de94c6 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,58 @@ +This directory contains various tests for the advanced applications. + +Tests in `codeception` directory are developed with [Codeception PHP Testing Framework](http://codeception.com/). + +After creating and setting up the advanced application, follow these steps to prepare for the tests: + +1. Install Codeception if it's not yet installed: + + ``` + composer global require "codeception/codeception=2.0.*" "codeception/specify=*" "codeception/verify=*" + ``` + + If you've never used Composer for global packages run `composer global status`. It should output: + + ``` + Changed current directory to + ``` + + Then add `/vendor/bin` to you `PATH` environment variable. Now you're able to use `codecept` from command + line globally. + +2. Install faker extension by running the following from template root directory where `composer.json` is: + + ``` + composer require --dev yiisoft/yii2-faker:* + ``` + +3. Create `yii2_advanced_tests` database then update it by applying migrations: + + ``` + codeception/bin/yii migrate + ``` + +4. In order to be able to run acceptance tests you need to start a webserver. The simplest way is to use PHP built in + webserver. In the root directory where `common`, `frontend` etc. are execute the following: + + ``` + php -S localhost:8080 + ``` + +5. Now you can run the tests with the following commands, assuming you are in the `tests/codeception` directory: + + ``` + # frontend tests + cd frontend + codecept build + codecept run + + # backend tests + + cd backend + codecept build + codecept run + + # etc. + ``` + + If you already have run `codecept build` for each application, you can skip that step and run all tests by a single `codecept run`. diff --git a/tests/_bootstrap.php b/tests/_bootstrap.php new file mode 100755 index 0000000..a302dda --- /dev/null +++ b/tests/_bootstrap.php @@ -0,0 +1,2 @@ +getScenario()->runStep(new \Codeception\Step\Action('debugWebDriverLogs', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Changes the subdomain for the 'url' configuration parameter. + * Does not open a page; use `amOnPage` for that. + * + * ``` php + * amOnSubdomain('user'); + * $I->amOnPage('/'); + * // moves to http://user.mysite.com/ + * ?> + * ``` + * + * @param $subdomain + * + * @return mixed + * @see \Codeception\Module\WebDriver::amOnSubdomain() + */ + public function amOnSubdomain($subdomain) { + return $this->getScenario()->runStep(new \Codeception\Step\Condition('amOnSubdomain', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Takes a screenshot of the current window and saves it to `tests/_output/debug`. + * + * ``` php + * amOnPage('/user/edit'); + * $I->makeScreenshot('edit_page'); + * // saved to: tests/_output/debug/edit_page.png + * ?> + * ``` + * + * @param $name + * @see \Codeception\Module\WebDriver::makeScreenshot() + */ + public function makeScreenshot($name) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('makeScreenshot', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Resize the current window. + * + * ``` php + * resizeWindow(800, 600); + * + * ``` + * + * @param int $width + * @param int $height + * @see \Codeception\Module\WebDriver::resizeWindow() + */ + public function resizeWindow($width, $height) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('resizeWindow', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that a cookie with the given name is set. + * You can set additional cookie params like `domain`, `path` as array passed in last argument. + * + * ``` php + * seeCookie('PHPSESSID'); + * ?> + * ``` + * + * @param $cookie + * @param array $params + * @return mixed + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeCookie() + */ + public function canSeeCookie($cookie, $params = null) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeCookie', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that a cookie with the given name is set. + * You can set additional cookie params like `domain`, `path` as array passed in last argument. + * + * ``` php + * seeCookie('PHPSESSID'); + * ?> + * ``` + * + * @param $cookie + * @param array $params + * @return mixed + * @see \Codeception\Module\WebDriver::seeCookie() + */ + public function seeCookie($cookie, $params = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeCookie', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that there isn't a cookie with the given name. + * You can set additional cookie params like `domain`, `path` as array passed in last argument. + * + * @param $cookie + * + * @param array $params + * @return mixed + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeCookie() + */ + public function cantSeeCookie($cookie, $params = null) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeCookie', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that there isn't a cookie with the given name. + * You can set additional cookie params like `domain`, `path` as array passed in last argument. + * + * @param $cookie + * + * @param array $params + * @return mixed + * @see \Codeception\Module\WebDriver::dontSeeCookie() + */ + public function dontSeeCookie($cookie, $params = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeCookie', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Sets a cookie with the given name and value. + * You can set additional cookie params like `domain`, `path`, `expires`, `secure` in array passed as last argument. + * + * ``` php + * setCookie('PHPSESSID', 'el4ukv0kqbvoirg7nkp4dncpk3'); + * ?> + * ``` + * + * @param $name + * @param $val + * @param array $params + * + * @return mixed + * @see \Codeception\Module\WebDriver::setCookie() + */ + public function setCookie($cookie, $value, $params = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('setCookie', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Unsets cookie with the given name. + * You can set additional cookie params like `domain`, `path` in array passed as last argument. + * + * @param $cookie + * + * @param array $params + * @return mixed + * @see \Codeception\Module\WebDriver::resetCookie() + */ + public function resetCookie($cookie, $params = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('resetCookie', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Grabs a cookie value. + * You can set additional cookie params like `domain`, `path` in array passed as last argument. + * + * @param $cookie + * + * @param array $params + * @return mixed + * @see \Codeception\Module\WebDriver::grabCookie() + */ + public function grabCookie($cookie, $params = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('grabCookie', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Open web page at the given absolute URL and sets its hostname as the base host. + * + * ``` php + * amOnUrl('http://codeception.com'); + * $I->amOnPage('/quickstart'); // moves to http://codeception.com/quickstart + * ?> + * ``` + * @see \Codeception\Module\WebDriver::amOnUrl() + */ + public function amOnUrl($url) { + return $this->getScenario()->runStep(new \Codeception\Step\Condition('amOnUrl', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Opens the page for the given relative URI. + * + * ``` php + * amOnPage('/'); + * // opens /register page + * $I->amOnPage('/register'); + * ``` + * + * @param $page + * @see \Codeception\Module\WebDriver::amOnPage() + */ + public function amOnPage($page) { + return $this->getScenario()->runStep(new \Codeception\Step\Condition('amOnPage', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current page contains the given string (case insensitive). + * + * You can specify a specific HTML element (via CSS or XPath) as the second + * parameter to only search within that element. + * + * ``` php + * see('Logout'); // I can suppose user is logged in + * $I->see('Sign Up', 'h1'); // I can suppose it's a signup page + * $I->see('Sign Up', '//body/h1'); // with XPath + * ``` + * + * Note that the search is done after stripping all HTML tags from the body, + * so `$I->see('strong')` will return true for strings like: + * + * - `

    I am Stronger than thou

    ` + * - `` + * + * But will *not* be true for strings like: + * + * - `Home` + * - `
    Home` + * - `` + * + * For checking the raw source code, use `seeInSource()`. + * + * @param $text + * @param null $selector + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::see() + */ + public function canSee($text, $selector = null) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('see', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current page contains the given string (case insensitive). + * + * You can specify a specific HTML element (via CSS or XPath) as the second + * parameter to only search within that element. + * + * ``` php + * see('Logout'); // I can suppose user is logged in + * $I->see('Sign Up', 'h1'); // I can suppose it's a signup page + * $I->see('Sign Up', '//body/h1'); // with XPath + * ``` + * + * Note that the search is done after stripping all HTML tags from the body, + * so `$I->see('strong')` will return true for strings like: + * + * - `

    I am Stronger than thou

    ` + * - `` + * + * But will *not* be true for strings like: + * + * - `Home` + * - `
    Home` + * - `` + * + * For checking the raw source code, use `seeInSource()`. + * + * @param $text + * @param null $selector + * @see \Codeception\Module\WebDriver::see() + */ + public function see($text, $selector = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('see', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current page doesn't contain the text specified (case insensitive). + * Give a locator as the second parameter to match a specific region. + * + * ```php + * dontSee('Login'); // I can suppose user is already logged in + * $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page + * $I->dontSee('Sign Up','//body/h1'); // with XPath + * ``` + * + * Note that the search is done after stripping all HTML tags from the body, + * so `$I->dontSee('strong')` will fail on strings like: + * + * - `

    I am Stronger than thou

    ` + * - `` + * + * But will ignore strings like: + * + * - `Home` + * - `
    Home` + * - `` + * + * For checking the raw source code, use `seeInSource()`. + * + * @param $text + * @param null $selector + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSee() + */ + public function cantSee($text, $selector = null) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSee', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current page doesn't contain the text specified (case insensitive). + * Give a locator as the second parameter to match a specific region. + * + * ```php + * dontSee('Login'); // I can suppose user is already logged in + * $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page + * $I->dontSee('Sign Up','//body/h1'); // with XPath + * ``` + * + * Note that the search is done after stripping all HTML tags from the body, + * so `$I->dontSee('strong')` will fail on strings like: + * + * - `

    I am Stronger than thou

    ` + * - `` + * + * But will ignore strings like: + * + * - `Home` + * - `
    Home` + * - `` + * + * For checking the raw source code, use `seeInSource()`. + * + * @param $text + * @param null $selector + * @see \Codeception\Module\WebDriver::dontSee() + */ + public function dontSee($text, $selector = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSee', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current page contains the given string in its + * raw source code. + * + * ``` php + * seeInSource('

    Green eggs & ham

    '); + * ``` + * + * @param $raw + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeInSource() + */ + public function canSeeInSource($raw) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInSource', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current page contains the given string in its + * raw source code. + * + * ``` php + * seeInSource('

    Green eggs & ham

    '); + * ``` + * + * @param $raw + * @see \Codeception\Module\WebDriver::seeInSource() + */ + public function seeInSource($raw) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInSource', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current page contains the given string in its + * raw source code. + * + * ```php + * dontSeeInSource('

    Green eggs & ham

    '); + * ``` + * + * @param $raw + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeInSource() + */ + public function cantSeeInSource($raw) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInSource', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current page contains the given string in its + * raw source code. + * + * ```php + * dontSeeInSource('

    Green eggs & ham

    '); + * ``` + * + * @param $raw + * @see \Codeception\Module\WebDriver::dontSeeInSource() + */ + public function dontSeeInSource($raw) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInSource', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the page source contains the given string. + * + * ```php + * seeInPageSource('getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInPageSource', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the page source contains the given string. + * + * ```php + * seeInPageSource('getScenario()->runStep(new \Codeception\Step\Assertion('seeInPageSource', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the page source doesn't contain the given string. + * + * @param $text + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeInPageSource() + */ + public function cantSeeInPageSource($text) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInPageSource', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the page source doesn't contain the given string. + * + * @param $text + * @see \Codeception\Module\WebDriver::dontSeeInPageSource() + */ + public function dontSeeInPageSource($text) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInPageSource', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Perform a click on a link or a button, given by a locator. + * If a fuzzy locator is given, the page will be searched for a button, link, or image matching the locator string. + * For buttons, the "value" attribute, "name" attribute, and inner text are searched. + * For links, the link text is searched. + * For images, the "alt" attribute and inner text of any parent links are searched. + * + * The second parameter is a context (CSS or XPath locator) to narrow the search. + * + * Note that if the locator matches a button of type `submit`, the form will be submitted. + * + * ``` php + * click('Logout'); + * // button of form + * $I->click('Submit'); + * // CSS button + * $I->click('#form input[type=submit]'); + * // XPath + * $I->click('//form/*[@type=submit]'); + * // link in context + * $I->click('Logout', '#nav'); + * // using strict locator + * $I->click(['link' => 'Login']); + * ?> + * ``` + * + * @param $link + * @param $context + * @see \Codeception\Module\WebDriver::click() + */ + public function click($link, $context = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('click', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that there's a link with the specified text. + * Give a full URL as the second parameter to match links with that exact URL. + * + * ``` php + * seeLink('Logout'); // matches Logout + * $I->seeLink('Logout','/logout'); // matches Logout + * ?> + * ``` + * + * @param $text + * @param null $url + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeLink() + */ + public function canSeeLink($text, $url = null) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeLink', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that there's a link with the specified text. + * Give a full URL as the second parameter to match links with that exact URL. + * + * ``` php + * seeLink('Logout'); // matches Logout + * $I->seeLink('Logout','/logout'); // matches Logout + * ?> + * ``` + * + * @param $text + * @param null $url + * @see \Codeception\Module\WebDriver::seeLink() + */ + public function seeLink($text, $url = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeLink', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the page doesn't contain a link with the given string. + * If the second parameter is given, only links with a matching "href" attribute will be checked. + * + * ``` php + * dontSeeLink('Logout'); // I suppose user is not logged in + * $I->dontSeeLink('Checkout now', '/store/cart.php'); + * ?> + * ``` + * + * @param $text + * @param null $url + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeLink() + */ + public function cantSeeLink($text, $url = null) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeLink', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the page doesn't contain a link with the given string. + * If the second parameter is given, only links with a matching "href" attribute will be checked. + * + * ``` php + * dontSeeLink('Logout'); // I suppose user is not logged in + * $I->dontSeeLink('Checkout now', '/store/cart.php'); + * ?> + * ``` + * + * @param $text + * @param null $url + * @see \Codeception\Module\WebDriver::dontSeeLink() + */ + public function dontSeeLink($text, $url = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeLink', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that current URI contains the given string. + * + * ``` php + * seeInCurrentUrl('home'); + * // to match: /users/1 + * $I->seeInCurrentUrl('/users/'); + * ?> + * ``` + * + * @param $uri + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeInCurrentUrl() + */ + public function canSeeInCurrentUrl($uri) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInCurrentUrl', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that current URI contains the given string. + * + * ``` php + * seeInCurrentUrl('home'); + * // to match: /users/1 + * $I->seeInCurrentUrl('/users/'); + * ?> + * ``` + * + * @param $uri + * @see \Codeception\Module\WebDriver::seeInCurrentUrl() + */ + public function seeInCurrentUrl($uri) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInCurrentUrl', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current URL is equal to the given string. + * Unlike `seeInCurrentUrl`, this only matches the full URL. + * + * ``` php + * seeCurrentUrlEquals('/'); + * ?> + * ``` + * + * @param $uri + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeCurrentUrlEquals() + */ + public function canSeeCurrentUrlEquals($uri) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeCurrentUrlEquals', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current URL is equal to the given string. + * Unlike `seeInCurrentUrl`, this only matches the full URL. + * + * ``` php + * seeCurrentUrlEquals('/'); + * ?> + * ``` + * + * @param $uri + * @see \Codeception\Module\WebDriver::seeCurrentUrlEquals() + */ + public function seeCurrentUrlEquals($uri) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeCurrentUrlEquals', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current URL matches the given regular expression. + * + * ``` php + * seeCurrentUrlMatches('~$/users/(\d+)~'); + * ?> + * ``` + * + * @param $uri + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeCurrentUrlMatches() + */ + public function canSeeCurrentUrlMatches($uri) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeCurrentUrlMatches', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current URL matches the given regular expression. + * + * ``` php + * seeCurrentUrlMatches('~$/users/(\d+)~'); + * ?> + * ``` + * + * @param $uri + * @see \Codeception\Module\WebDriver::seeCurrentUrlMatches() + */ + public function seeCurrentUrlMatches($uri) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeCurrentUrlMatches', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current URI doesn't contain the given string. + * + * ``` php + * dontSeeInCurrentUrl('/users/'); + * ?> + * ``` + * + * @param $uri + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeInCurrentUrl() + */ + public function cantSeeInCurrentUrl($uri) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInCurrentUrl', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current URI doesn't contain the given string. + * + * ``` php + * dontSeeInCurrentUrl('/users/'); + * ?> + * ``` + * + * @param $uri + * @see \Codeception\Module\WebDriver::dontSeeInCurrentUrl() + */ + public function dontSeeInCurrentUrl($uri) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInCurrentUrl', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current URL doesn't equal the given string. + * Unlike `dontSeeInCurrentUrl`, this only matches the full URL. + * + * ``` php + * dontSeeCurrentUrlEquals('/'); + * ?> + * ``` + * + * @param $uri + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeCurrentUrlEquals() + */ + public function cantSeeCurrentUrlEquals($uri) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeCurrentUrlEquals', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the current URL doesn't equal the given string. + * Unlike `dontSeeInCurrentUrl`, this only matches the full URL. + * + * ``` php + * dontSeeCurrentUrlEquals('/'); + * ?> + * ``` + * + * @param $uri + * @see \Codeception\Module\WebDriver::dontSeeCurrentUrlEquals() + */ + public function dontSeeCurrentUrlEquals($uri) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeCurrentUrlEquals', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that current url doesn't match the given regular expression. + * + * ``` php + * dontSeeCurrentUrlMatches('~$/users/(\d+)~'); + * ?> + * ``` + * + * @param $uri + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeCurrentUrlMatches() + */ + public function cantSeeCurrentUrlMatches($uri) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeCurrentUrlMatches', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that current url doesn't match the given regular expression. + * + * ``` php + * dontSeeCurrentUrlMatches('~$/users/(\d+)~'); + * ?> + * ``` + * + * @param $uri + * @see \Codeception\Module\WebDriver::dontSeeCurrentUrlMatches() + */ + public function dontSeeCurrentUrlMatches($uri) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeCurrentUrlMatches', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Executes the given regular expression against the current URI and returns the first match. + * If no parameters are provided, the full URI is returned. + * + * ``` php + * grabFromCurrentUrl('~$/user/(\d+)/~'); + * $uri = $I->grabFromCurrentUrl(); + * ?> + * ``` + * + * @param null $uri + * + * @return mixed + * @see \Codeception\Module\WebDriver::grabFromCurrentUrl() + */ + public function grabFromCurrentUrl($uri = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('grabFromCurrentUrl', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the specified checkbox is checked. + * + * ``` php + * seeCheckboxIsChecked('#agree'); // I suppose user agreed to terms + * $I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user agreed to terms, If there is only one checkbox in form. + * $I->seeCheckboxIsChecked('//form/input[@type=checkbox and @name=agree]'); + * ?> + * ``` + * + * @param $checkbox + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeCheckboxIsChecked() + */ + public function canSeeCheckboxIsChecked($checkbox) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeCheckboxIsChecked', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the specified checkbox is checked. + * + * ``` php + * seeCheckboxIsChecked('#agree'); // I suppose user agreed to terms + * $I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user agreed to terms, If there is only one checkbox in form. + * $I->seeCheckboxIsChecked('//form/input[@type=checkbox and @name=agree]'); + * ?> + * ``` + * + * @param $checkbox + * @see \Codeception\Module\WebDriver::seeCheckboxIsChecked() + */ + public function seeCheckboxIsChecked($checkbox) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeCheckboxIsChecked', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Check that the specified checkbox is unchecked. + * + * ``` php + * dontSeeCheckboxIsChecked('#agree'); // I suppose user didn't agree to terms + * $I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user didn't check the first checkbox in form. + * ?> + * ``` + * + * @param $checkbox + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeCheckboxIsChecked() + */ + public function cantSeeCheckboxIsChecked($checkbox) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeCheckboxIsChecked', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Check that the specified checkbox is unchecked. + * + * ``` php + * dontSeeCheckboxIsChecked('#agree'); // I suppose user didn't agree to terms + * $I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user didn't check the first checkbox in form. + * ?> + * ``` + * + * @param $checkbox + * @see \Codeception\Module\WebDriver::dontSeeCheckboxIsChecked() + */ + public function dontSeeCheckboxIsChecked($checkbox) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeCheckboxIsChecked', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the given input field or textarea contains the given value. + * For fuzzy locators, fields are matched by label text, the "name" attribute, CSS, and XPath. + * + * ``` php + * seeInField('Body','Type your comment here'); + * $I->seeInField('form textarea[name=body]','Type your comment here'); + * $I->seeInField('form input[type=hidden]','hidden_value'); + * $I->seeInField('#searchform input','Search'); + * $I->seeInField('//form/*[@name=search]','Search'); + * $I->seeInField(['name' => 'search'], 'Search'); + * ?> + * ``` + * + * @param $field + * @param $value + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeInField() + */ + public function canSeeInField($field, $value) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInField', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the given input field or textarea contains the given value. + * For fuzzy locators, fields are matched by label text, the "name" attribute, CSS, and XPath. + * + * ``` php + * seeInField('Body','Type your comment here'); + * $I->seeInField('form textarea[name=body]','Type your comment here'); + * $I->seeInField('form input[type=hidden]','hidden_value'); + * $I->seeInField('#searchform input','Search'); + * $I->seeInField('//form/*[@name=search]','Search'); + * $I->seeInField(['name' => 'search'], 'Search'); + * ?> + * ``` + * + * @param $field + * @param $value + * @see \Codeception\Module\WebDriver::seeInField() + */ + public function seeInField($field, $value) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInField', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that an input field or textarea doesn't contain the given value. + * For fuzzy locators, the field is matched by label text, CSS and XPath. + * + * ``` php + * dontSeeInField('Body','Type your comment here'); + * $I->dontSeeInField('form textarea[name=body]','Type your comment here'); + * $I->dontSeeInField('form input[type=hidden]','hidden_value'); + * $I->dontSeeInField('#searchform input','Search'); + * $I->dontSeeInField('//form/*[@name=search]','Search'); + * $I->dontSeeInField(['name' => 'search'], 'Search'); + * ?> + * ``` + * + * @param $field + * @param $value + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeInField() + */ + public function cantSeeInField($field, $value) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInField', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that an input field or textarea doesn't contain the given value. + * For fuzzy locators, the field is matched by label text, CSS and XPath. + * + * ``` php + * dontSeeInField('Body','Type your comment here'); + * $I->dontSeeInField('form textarea[name=body]','Type your comment here'); + * $I->dontSeeInField('form input[type=hidden]','hidden_value'); + * $I->dontSeeInField('#searchform input','Search'); + * $I->dontSeeInField('//form/*[@name=search]','Search'); + * $I->dontSeeInField(['name' => 'search'], 'Search'); + * ?> + * ``` + * + * @param $field + * @param $value + * @see \Codeception\Module\WebDriver::dontSeeInField() + */ + public function dontSeeInField($field, $value) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInField', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks if the array of form parameters (name => value) are set on the form matched with the + * passed selector. + * + * ``` php + * seeInFormFields('form[name=myform]', [ + * 'input1' => 'value', + * 'input2' => 'other value', + * ]); + * ?> + * ``` + * + * For multi-select elements, or to check values of multiple elements with the same name, an + * array may be passed: + * + * ``` php + * seeInFormFields('.form-class', [ + * 'multiselect' => [ + * 'value1', + * 'value2', + * ], + * 'checkbox[]' => [ + * 'a checked value', + * 'another checked value', + * ], + * ]); + * ?> + * ``` + * + * Additionally, checkbox values can be checked with a boolean. + * + * ``` php + * seeInFormFields('#form-id', [ + * 'checkbox1' => true, // passes if checked + * 'checkbox2' => false, // passes if unchecked + * ]); + * ?> + * ``` + * + * Pair this with submitForm for quick testing magic. + * + * ``` php + * 'value', + * 'field2' => 'another value', + * 'checkbox1' => true, + * // ... + * ]; + * $I->submitForm('//form[@id=my-form]', $form, 'submitButton'); + * // $I->amOnPage('/path/to/form-page') may be needed + * $I->seeInFormFields('//form[@id=my-form]', $form); + * ?> + * ``` + * + * @param $formSelector + * @param $params + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeInFormFields() + */ + public function canSeeInFormFields($formSelector, $params) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInFormFields', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks if the array of form parameters (name => value) are set on the form matched with the + * passed selector. + * + * ``` php + * seeInFormFields('form[name=myform]', [ + * 'input1' => 'value', + * 'input2' => 'other value', + * ]); + * ?> + * ``` + * + * For multi-select elements, or to check values of multiple elements with the same name, an + * array may be passed: + * + * ``` php + * seeInFormFields('.form-class', [ + * 'multiselect' => [ + * 'value1', + * 'value2', + * ], + * 'checkbox[]' => [ + * 'a checked value', + * 'another checked value', + * ], + * ]); + * ?> + * ``` + * + * Additionally, checkbox values can be checked with a boolean. + * + * ``` php + * seeInFormFields('#form-id', [ + * 'checkbox1' => true, // passes if checked + * 'checkbox2' => false, // passes if unchecked + * ]); + * ?> + * ``` + * + * Pair this with submitForm for quick testing magic. + * + * ``` php + * 'value', + * 'field2' => 'another value', + * 'checkbox1' => true, + * // ... + * ]; + * $I->submitForm('//form[@id=my-form]', $form, 'submitButton'); + * // $I->amOnPage('/path/to/form-page') may be needed + * $I->seeInFormFields('//form[@id=my-form]', $form); + * ?> + * ``` + * + * @param $formSelector + * @param $params + * @see \Codeception\Module\WebDriver::seeInFormFields() + */ + public function seeInFormFields($formSelector, $params) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInFormFields', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks if the array of form parameters (name => value) are not set on the form matched with + * the passed selector. + * + * ``` php + * dontSeeInFormFields('form[name=myform]', [ + * 'input1' => 'non-existent value', + * 'input2' => 'other non-existent value', + * ]); + * ?> + * ``` + * + * To check that an element hasn't been assigned any one of many values, an array can be passed + * as the value: + * + * ``` php + * dontSeeInFormFields('.form-class', [ + * 'fieldName' => [ + * 'This value shouldn\'t be set', + * 'And this value shouldn\'t be set', + * ], + * ]); + * ?> + * ``` + * + * Additionally, checkbox values can be checked with a boolean. + * + * ``` php + * dontSeeInFormFields('#form-id', [ + * 'checkbox1' => true, // fails if checked + * 'checkbox2' => false, // fails if unchecked + * ]); + * ?> + * ``` + * + * @param $formSelector + * @param $params + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeInFormFields() + */ + public function cantSeeInFormFields($formSelector, $params) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInFormFields', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks if the array of form parameters (name => value) are not set on the form matched with + * the passed selector. + * + * ``` php + * dontSeeInFormFields('form[name=myform]', [ + * 'input1' => 'non-existent value', + * 'input2' => 'other non-existent value', + * ]); + * ?> + * ``` + * + * To check that an element hasn't been assigned any one of many values, an array can be passed + * as the value: + * + * ``` php + * dontSeeInFormFields('.form-class', [ + * 'fieldName' => [ + * 'This value shouldn\'t be set', + * 'And this value shouldn\'t be set', + * ], + * ]); + * ?> + * ``` + * + * Additionally, checkbox values can be checked with a boolean. + * + * ``` php + * dontSeeInFormFields('#form-id', [ + * 'checkbox1' => true, // fails if checked + * 'checkbox2' => false, // fails if unchecked + * ]); + * ?> + * ``` + * + * @param $formSelector + * @param $params + * @see \Codeception\Module\WebDriver::dontSeeInFormFields() + */ + public function dontSeeInFormFields($formSelector, $params) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInFormFields', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Selects an option in a select tag or in radio button group. + * + * ``` php + * selectOption('form select[name=account]', 'Premium'); + * $I->selectOption('form input[name=payment]', 'Monthly'); + * $I->selectOption('//form/select[@name=account]', 'Monthly'); + * ?> + * ``` + * + * Provide an array for the second argument to select multiple options: + * + * ``` php + * selectOption('Which OS do you use?', array('Windows','Linux')); + * ?> + * ``` + * + * @param $select + * @param $option + * @see \Codeception\Module\WebDriver::selectOption() + */ + public function selectOption($select, $option) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('selectOption', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * + * @see \Codeception\Module\WebDriver::unselectOption() + */ + public function unselectOption($select, $option) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('unselectOption', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Ticks a checkbox. For radio buttons, use the `selectOption` method instead. + * + * ``` php + * checkOption('#agree'); + * ?> + * ``` + * + * @param $option + * @see \Codeception\Module\WebDriver::checkOption() + */ + public function checkOption($option) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('checkOption', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Unticks a checkbox. + * + * ``` php + * uncheckOption('#notify'); + * ?> + * ``` + * + * @param $option + * @see \Codeception\Module\WebDriver::uncheckOption() + */ + public function uncheckOption($option) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('uncheckOption', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Fills a text field or textarea with the given string. + * + * ``` php + * fillField("//input[@type='text']", "Hello World!"); + * $I->fillField(['name' => 'email'], 'jon@mail.com'); + * ?> + * ``` + * + * @param $field + * @param $value + * @see \Codeception\Module\WebDriver::fillField() + */ + public function fillField($field, $value) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('fillField', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Attaches a file relative to the Codeception data directory to the given file upload field. + * + * ``` php + * attachFile('input[@type="file"]', 'prices.xls'); + * ?> + * ``` + * + * @param $field + * @param $filename + * @see \Codeception\Module\WebDriver::attachFile() + */ + public function attachFile($field, $filename) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('attachFile', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Grabs all visible text from the current page. + * + * @return string + * @see \Codeception\Module\WebDriver::getVisibleText() + */ + public function getVisibleText() { + return $this->getScenario()->runStep(new \Codeception\Step\Action('getVisibleText', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Finds and returns the text contents of the given element. + * If a fuzzy locator is used, the element is found using CSS, XPath, and by matching the full page source by regular expression. + * + * ``` php + * grabTextFrom('h1'); + * $heading = $I->grabTextFrom('descendant-or-self::h1'); + * $value = $I->grabTextFrom('~ + * ``` + * + * @param $cssOrXPathOrRegex + * + * @return mixed + * @see \Codeception\Module\WebDriver::grabTextFrom() + */ + public function grabTextFrom($cssOrXPathOrRegex) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('grabTextFrom', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Grabs the value of the given attribute value from the given element. + * Fails if element is not found. + * + * ``` php + * grabAttributeFrom('#tooltip', 'title'); + * ?> + * ``` + * + * + * @param $cssOrXpath + * @param $attribute + * + * @return mixed + * @see \Codeception\Module\WebDriver::grabAttributeFrom() + */ + public function grabAttributeFrom($cssOrXpath, $attribute) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('grabAttributeFrom', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Finds the value for the given form field. + * If a fuzzy locator is used, the field is found by field name, CSS, and XPath. + * + * ``` php + * grabValueFrom('Name'); + * $name = $I->grabValueFrom('input[name=username]'); + * $name = $I->grabValueFrom('descendant-or-self::form/descendant::input[@name = 'username']'); + * $name = $I->grabValueFrom(['name' => 'username']); + * ?> + * ``` + * + * @param $field + * + * @return mixed + * @see \Codeception\Module\WebDriver::grabValueFrom() + */ + public function grabValueFrom($field) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('grabValueFrom', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Grabs either the text content, or attribute values, of nodes + * matched by $cssOrXpath and returns them as an array. + * + * ```html + * First + * Second + * Third + * ``` + * + * ```php + * grabMultiple('a'); + * + * // would return ['#first', '#second', '#third'] + * $aLinks = $I->grabMultiple('a', 'href'); + * ?> + * ``` + * + * @param $cssOrXpath + * @param $attribute + * @return string[] + * @see \Codeception\Module\WebDriver::grabMultiple() + */ + public function grabMultiple($cssOrXpath, $attribute = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('grabMultiple', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the given element exists on the page and is visible. + * You can also specify expected attributes of this element. + * + * ``` php + * seeElement('.error'); + * $I->seeElement('//form/input[1]'); + * $I->seeElement('input', ['name' => 'login']); + * $I->seeElement('input', ['value' => '123456']); + * + * // strict locator in first arg, attributes in second + * $I->seeElement(['css' => 'form input'], ['name' => 'login']); + * ?> + * ``` + * + * @param $selector + * @param array $attributes + * @return + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeElement() + */ + public function canSeeElement($selector, $attributes = null) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeElement', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the given element exists on the page and is visible. + * You can also specify expected attributes of this element. + * + * ``` php + * seeElement('.error'); + * $I->seeElement('//form/input[1]'); + * $I->seeElement('input', ['name' => 'login']); + * $I->seeElement('input', ['value' => '123456']); + * + * // strict locator in first arg, attributes in second + * $I->seeElement(['css' => 'form input'], ['name' => 'login']); + * ?> + * ``` + * + * @param $selector + * @param array $attributes + * @return + * @see \Codeception\Module\WebDriver::seeElement() + */ + public function seeElement($selector, $attributes = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeElement', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the given element is invisible or not present on the page. + * You can also specify expected attributes of this element. + * + * ``` php + * dontSeeElement('.error'); + * $I->dontSeeElement('//form/input[1]'); + * $I->dontSeeElement('input', ['name' => 'login']); + * $I->dontSeeElement('input', ['value' => '123456']); + * ?> + * ``` + * + * @param $selector + * @param array $attributes + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeElement() + */ + public function cantSeeElement($selector, $attributes = null) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeElement', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the given element is invisible or not present on the page. + * You can also specify expected attributes of this element. + * + * ``` php + * dontSeeElement('.error'); + * $I->dontSeeElement('//form/input[1]'); + * $I->dontSeeElement('input', ['name' => 'login']); + * $I->dontSeeElement('input', ['value' => '123456']); + * ?> + * ``` + * + * @param $selector + * @param array $attributes + * @see \Codeception\Module\WebDriver::dontSeeElement() + */ + public function dontSeeElement($selector, $attributes = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeElement', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the given element exists on the page, even it is invisible. + * + * ``` php + * seeElementInDOM('//form/input[type=hidden]'); + * ?> + * ``` + * + * @param $selector + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeElementInDOM() + */ + public function canSeeElementInDOM($selector, $attributes = null) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeElementInDOM', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the given element exists on the page, even it is invisible. + * + * ``` php + * seeElementInDOM('//form/input[type=hidden]'); + * ?> + * ``` + * + * @param $selector + * @see \Codeception\Module\WebDriver::seeElementInDOM() + */ + public function seeElementInDOM($selector, $attributes = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeElementInDOM', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Opposite of `seeElementInDOM`. + * + * @param $selector + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeElementInDOM() + */ + public function cantSeeElementInDOM($selector, $attributes = null) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeElementInDOM', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Opposite of `seeElementInDOM`. + * + * @param $selector + * @see \Codeception\Module\WebDriver::dontSeeElementInDOM() + */ + public function dontSeeElementInDOM($selector, $attributes = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeElementInDOM', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that there are a certain number of elements matched by the given locator on the page. + * + * ``` php + * seeNumberOfElements('tr', 10); + * $I->seeNumberOfElements('tr', [0,10]); //between 0 and 10 elements + * ?> + * ``` + * @param $selector + * @param mixed $expected : + * - string: strict number + * - array: range of numbers [0,10] + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeNumberOfElements() + */ + public function canSeeNumberOfElements($selector, $expected) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeNumberOfElements', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that there are a certain number of elements matched by the given locator on the page. + * + * ``` php + * seeNumberOfElements('tr', 10); + * $I->seeNumberOfElements('tr', [0,10]); //between 0 and 10 elements + * ?> + * ``` + * @param $selector + * @param mixed $expected : + * - string: strict number + * - array: range of numbers [0,10] + * @see \Codeception\Module\WebDriver::seeNumberOfElements() + */ + public function seeNumberOfElements($selector, $expected) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeNumberOfElements', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeNumberOfElementsInDOM() + */ + public function canSeeNumberOfElementsInDOM($selector, $expected) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeNumberOfElementsInDOM', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * + * @see \Codeception\Module\WebDriver::seeNumberOfElementsInDOM() + */ + public function seeNumberOfElementsInDOM($selector, $expected) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeNumberOfElementsInDOM', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the given option is selected. + * + * ``` php + * seeOptionIsSelected('#form input[name=payment]', 'Visa'); + * ?> + * ``` + * + * @param $selector + * @param $optionText + * + * @return mixed + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeOptionIsSelected() + */ + public function canSeeOptionIsSelected($selector, $optionText) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeOptionIsSelected', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the given option is selected. + * + * ``` php + * seeOptionIsSelected('#form input[name=payment]', 'Visa'); + * ?> + * ``` + * + * @param $selector + * @param $optionText + * + * @return mixed + * @see \Codeception\Module\WebDriver::seeOptionIsSelected() + */ + public function seeOptionIsSelected($selector, $optionText) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeOptionIsSelected', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the given option is not selected. + * + * ``` php + * dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); + * ?> + * ``` + * + * @param $selector + * @param $optionText + * + * @return mixed + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeOptionIsSelected() + */ + public function cantSeeOptionIsSelected($selector, $optionText) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeOptionIsSelected', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the given option is not selected. + * + * ``` php + * dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); + * ?> + * ``` + * + * @param $selector + * @param $optionText + * + * @return mixed + * @see \Codeception\Module\WebDriver::dontSeeOptionIsSelected() + */ + public function dontSeeOptionIsSelected($selector, $optionText) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeOptionIsSelected', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the page title contains the given string. + * + * ``` php + * seeInTitle('Blog - Post #1'); + * ?> + * ``` + * + * @param $title + * + * @return mixed + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeInTitle() + */ + public function canSeeInTitle($title) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInTitle', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the page title contains the given string. + * + * ``` php + * seeInTitle('Blog - Post #1'); + * ?> + * ``` + * + * @param $title + * + * @return mixed + * @see \Codeception\Module\WebDriver::seeInTitle() + */ + public function seeInTitle($title) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInTitle', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the page title does not contain the given string. + * + * @param $title + * + * @return mixed + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::dontSeeInTitle() + */ + public function cantSeeInTitle($title) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInTitle', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the page title does not contain the given string. + * + * @param $title + * + * @return mixed + * @see \Codeception\Module\WebDriver::dontSeeInTitle() + */ + public function dontSeeInTitle($title) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeInTitle', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Accepts the active JavaScript native popup window, as created by `window.alert`|`window.confirm`|`window.prompt`. + * Don't confuse popups with modal windows, as created by [various libraries](http://jster.net/category/windows-modals-popups). + * @see \Codeception\Module\WebDriver::acceptPopup() + */ + public function acceptPopup() { + return $this->getScenario()->runStep(new \Codeception\Step\Action('acceptPopup', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Dismisses the active JavaScript popup, as created by `window.alert`|`window.confirm`|`window.prompt`. + * @see \Codeception\Module\WebDriver::cancelPopup() + */ + public function cancelPopup() { + return $this->getScenario()->runStep(new \Codeception\Step\Action('cancelPopup', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the active JavaScript popup, as created by `window.alert`|`window.confirm`|`window.prompt`, contains the given string. + * + * @param $text + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\WebDriver::seeInPopup() + */ + public function canSeeInPopup($text) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeInPopup', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that the active JavaScript popup, as created by `window.alert`|`window.confirm`|`window.prompt`, contains the given string. + * + * @param $text + * @see \Codeception\Module\WebDriver::seeInPopup() + */ + public function seeInPopup($text) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeInPopup', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Enters text into a native JavaScript prompt popup, as created by `window.prompt`. + * + * @param $keys + * @see \Codeception\Module\WebDriver::typeInPopup() + */ + public function typeInPopup($keys) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('typeInPopup', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Reloads the current page. + * @see \Codeception\Module\WebDriver::reloadPage() + */ + public function reloadPage() { + return $this->getScenario()->runStep(new \Codeception\Step\Action('reloadPage', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Moves back in history. + * @see \Codeception\Module\WebDriver::moveBack() + */ + public function moveBack() { + return $this->getScenario()->runStep(new \Codeception\Step\Action('moveBack', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Moves forward in history. + * @see \Codeception\Module\WebDriver::moveForward() + */ + public function moveForward() { + return $this->getScenario()->runStep(new \Codeception\Step\Action('moveForward', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Submits the given form on the page, optionally with the given form + * values. Give the form fields values as an array. Note that hidden fields + * can't be accessed. + * + * Skipped fields will be filled by their values from the page. + * You don't need to click the 'Submit' button afterwards. + * This command itself triggers the request to form's action. + * + * You can optionally specify what button's value to include + * in the request with the last parameter as an alternative to + * explicitly setting its value in the second parameter, as + * button values are not otherwise included in the request. + * + * Examples: + * + * ``` php + * submitForm('#login', [ + * 'login' => 'davert', + * 'password' => '123456' + * ]); + * // or + * $I->submitForm('#login', [ + * 'login' => 'davert', + * 'password' => '123456' + * ], 'submitButtonName'); + * + * ``` + * + * For example, given this sample "Sign Up" form: + * + * ``` html + *
    + * Login: + *
    + * Password: + *
    + * Do you agree to our terms? + *
    + * Select pricing plan: + * + * + *
    + * ``` + * + * You could write the following to submit it: + * + * ``` php + * submitForm( + * '#userForm', + * [ + * 'user[login]' => 'Davert', + * 'user[password]' => '123456', + * 'user[agree]' => true + * ], + * 'submitButton' + * ); + * ``` + * Note that "2" will be the submitted value for the "plan" field, as it is + * the selected option. + * + * Also note that this differs from PhpBrowser, in that + * ```'user' => [ 'login' => 'Davert' ]``` is not supported at the moment. + * Named array keys *must* be included in the name as above. + * + * Pair this with seeInFormFields for quick testing magic. + * + * ``` php + * 'value', + * 'field2' => 'another value', + * 'checkbox1' => true, + * // ... + * ]; + * $I->submitForm('//form[@id=my-form]', $form, 'submitButton'); + * // $I->amOnPage('/path/to/form-page') may be needed + * $I->seeInFormFields('//form[@id=my-form]', $form); + * ?> + * ``` + * + * Parameter values must be set to arrays for multiple input fields + * of the same name, or multi-select combo boxes. For checkboxes, + * either the string value can be used, or boolean values which will + * be replaced by the checkbox's value in the DOM. + * + * ``` php + * submitForm('#my-form', [ + * 'field1' => 'value', + * 'checkbox' => [ + * 'value of first checkbox', + * 'value of second checkbox, + * ], + * 'otherCheckboxes' => [ + * true, + * false, + * false + * ], + * 'multiselect' => [ + * 'first option value', + * 'second option value' + * ] + * ]); + * ?> + * ``` + * + * Mixing string and boolean values for a checkbox's value is not supported + * and may produce unexpected results. + * + * Field names ending in "[]" must be passed without the trailing square + * bracket characters, and must contain an array for its value. This allows + * submitting multiple values with the same name, consider: + * + * ```php + * $I->submitForm('#my-form', [ + * 'field[]' => 'value', + * 'field[]' => 'another value', // 'field[]' is already a defined key + * ]); + * ``` + * + * The solution is to pass an array value: + * + * ```php + * // this way both values are submitted + * $I->submitForm('#my-form', [ + * 'field' => [ + * 'value', + * 'another value', + * ] + * ]); + * ``` + * @param $selector + * @param $params + * @param $button + * @see \Codeception\Module\WebDriver::submitForm() + */ + public function submitForm($selector, $params, $button = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('submitForm', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Waits up to $timeout seconds for the given element to change. + * Element "change" is determined by a callback function which is called repeatedly until the return value evaluates to true. + * + * ``` php + * waitForElementChange('#menu', function(WebDriverElement $el) { + * return $el->isDisplayed(); + * }, 100); + * ?> + * ``` + * + * @param $element + * @param \Closure $callback + * @param int $timeout seconds + * @throws \Codeception\Exception\ElementNotFound + * @see \Codeception\Module\WebDriver::waitForElementChange() + */ + public function waitForElementChange($element, $callback, $timeout = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('waitForElementChange', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Waits up to $timeout seconds for an element to appear on the page. + * If the element doesn't appear, a timeout exception is thrown. + * + * ``` php + * waitForElement('#agree_button', 30); // secs + * $I->click('#agree_button'); + * ?> + * ``` + * + * @param $element + * @param int $timeout seconds + * @throws \Exception + * @see \Codeception\Module\WebDriver::waitForElement() + */ + public function waitForElement($element, $timeout = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('waitForElement', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Waits up to $timeout seconds for the given element to be visible on the page. + * If element doesn't appear, a timeout exception is thrown. + * + * ``` php + * waitForElementVisible('#agree_button', 30); // secs + * $I->click('#agree_button'); + * ?> + * ``` + * + * @param $element + * @param int $timeout seconds + * @throws \Exception + * @see \Codeception\Module\WebDriver::waitForElementVisible() + */ + public function waitForElementVisible($element, $timeout = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('waitForElementVisible', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Waits up to $timeout seconds for the given element to become invisible. + * If element stays visible, a timeout exception is thrown. + * + * ``` php + * waitForElementNotVisible('#agree_button', 30); // secs + * ?> + * ``` + * + * @param $element + * @param int $timeout seconds + * @throws \Exception + * @see \Codeception\Module\WebDriver::waitForElementNotVisible() + */ + public function waitForElementNotVisible($element, $timeout = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('waitForElementNotVisible', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Waits up to $timeout seconds for the given string to appear on the page. + * Can also be passed a selector to search in. + * If the given text doesn't appear, a timeout exception is thrown. + * + * ``` php + * waitForText('foo', 30); // secs + * $I->waitForText('foo', 30, '.title'); // secs + * ?> + * ``` + * + * @param string $text + * @param int $timeout seconds + * @param null $selector + * @throws \Exception + * @see \Codeception\Module\WebDriver::waitForText() + */ + public function waitForText($text, $timeout = null, $selector = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('waitForText', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Wait for $timeout seconds. + * + * @param int $timeout secs + * @throws \Codeception\Exception\TestRuntimeException + * @see \Codeception\Module\WebDriver::wait() + */ + public function wait($timeout) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('wait', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Low-level API method. + * If Codeception commands are not enough, this allows you to use Selenium WebDriver methods directly: + * + * ``` php + * $I->executeInSelenium(function(\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) { + * $webdriver->get('http://google.com'); + * }); + * ``` + * + * This runs in the context of the [RemoteWebDriver class](https://github.com/facebook/php-webdriver/blob/master/lib/remote/RemoteWebDriver.php). + * Try not to use this command on a regular basis. + * If Codeception lacks a feature you need, please implement it and submit a patch. + * + * @param callable $function + * @see \Codeception\Module\WebDriver::executeInSelenium() + */ + public function executeInSelenium($function) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('executeInSelenium', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Switch to another window identified by name. + * + * The window can only be identified by name. If the $name parameter is blank, the parent window will be used. + * + * Example: + * ``` html + * + * ``` + * + * ``` php + * click("Open window"); + * # switch to another window + * $I->switchToWindow("another_window"); + * # switch to parent window + * $I->switchToWindow(); + * ?> + * ``` + * + * If the window has no name, the only way to access it is via the `executeInSelenium()` method, like so: + * + * ``` php + * executeInSelenium(function (\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) { + * $handles=$webdriver->getWindowHandles(); + * $last_window = end($handles); + * $webdriver->switchTo()->window($last_window); + * }); + * ?> + * ``` + * + * @param string|null $name + * @see \Codeception\Module\WebDriver::switchToWindow() + */ + public function switchToWindow($name = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('switchToWindow', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Switch to another frame on the page. + * + * Example: + * ``` html + *