git add stuff

This commit is contained in:
Alan
2026-02-14 19:50:25 +03:00
parent 5c3329238b
commit 3942076805
1130 changed files with 120023 additions and 6 deletions

12
.gitignore vendored
View File

@@ -77,10 +77,10 @@ fabric.properties
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
files/
feedback/images/
simpla/files/
design/
lib/
images/
/files/
/feedback/images/
/simpla/files/
/design/
/lib/
/images/
compiled/

View File

@@ -0,0 +1,91 @@
.icons a.edit{ background-image: url(../images/pencil.png); }
#imageThumb{
width:450px;
min-height:180px;
border:1px #9b9b9b dashed;
background:#e5e5e5;
text-align:center;
vertical-align:middle;
font:bold 40px Arial, Helvetica, sans-serif;
color:#d6d6d6;
text-shadow: 1px 0px 2px #9b9b9b;
}
#imageThumb span{
display:block;
font-size:14px;
color:silver;
text-shadow: 1px 0px 1px #ffffff;
}
#imageThumb img{
position:relative;
display:block;
margin:auto auto;
margin-top:5px;
max-width:440px;
max-height:170px;
}
a.button_yellow {
display: block;
float: right;
height: 16px;
text-decoration: none;
padding: 5px 20px;
font-size:13px;
}
.cell.banner,
.cell.group{
width: 830px;
text-align: center;
}
.banner_wrapper{
position:relative;
margin:0 auto;
width: 450px;
border: 15px solid #fff;
box-shadow: 1px 1px 4px #B4B4B4;
background: #fff;
border-radius: 3px;
}
.banner_wrapper .title{border-bottom:1px dashed #d0d0d0;}
.banner_wrapper .title a,
.banner_wrapper .title a:visited{
position:relative;
display:block;
margin:-15px -15px 0 -15px;
padding:5px 10px;
font:bold 12px Arial;
color: #ffffff;
text-align:left;
text-decoration:none;
border-radius: 3px 3px 0 0;
background:#595858;
}
.group .banner_wrapper .title span{
display:block;
padding:5px 0;
font:normal 11px Arial;
color:#777777;
}
.banner_wrapper img{
max-width: 420px;
max-height: 200px;
vertical-align: middle;
}
.banner_wrapper .banner{
margin:15px 0;
}
.banner_wrapper .tip{
position:relative;
margin:0 -10px -10px -10px;
padding:5px;
font:normal 12px monospace;
color:#000000;
border-top:1px dashed #8a8a8a;
background:#e9e5e5;
}

295
simpla/design/css/main.css Normal file
View File

@@ -0,0 +1,295 @@
body{
background-color: #858585;
background-image: url(../images/bgd.png);
background-repeat: repeat;
color: #333333;
font: 13px "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
}
body, html{
width: 100%;
height: 100%;
}
#main {
width: 1000px;
margin-right: auto;
margin-left: auto;
}
#main_menu {
width: 100%;
padding-top: 35px;
font-size: 12px;
margin-right: auto;
margin-left: auto;
height: 90px;
}
#main_menu li {
float: left;
width: 9%;
text-align: center;
white-space: nowrap;
}
#main_menu li b {
text-decoration: underline;
display: block;
font-weight: normal;
font-style: normal;
}
#main_menu a {
color: #ffffff;
text-decoration: none;
}
#main_menu a:hover {
color: #ffffff;
}
#main_menu div.counter {
margin-left: 70px;
margin-top:-75px;
}
#main_menu div.counter span{
color:white;
font-size:11px;
text-align:center;
background-color:red;
padding: 1px 1px 1px 2px;
min-width: 13px;
line-height: 14px;
display: table-cell;
border-radius:10px;
-moz-border-radius:10px;
}
#tab_menu {
width: 100%;
margin-right: auto;
margin-left: auto;
padding-right: 2px;
font-size: 17px;
height: 36px;
border-bottom: 1px solid #ffffff;
}
#tab_menu a {
text-decoration: none;
color: #F2F2F2;
}
#tab_menu li {
float: left;
}
#tab_menu li a {
height: 28px;
padding-right: 20px;
padding-left: 20px;
padding-top: 7px;
margin-right: 15px;
border-top: 1px solid #ffffff;
border-right: 1px solid #ffffff;
border-left: 1px solid #ffffff;
text-shadow: 0px 1px 0px #fff;
display: block;
background: url(../images/tabs_bgd.jpg) 0 -29px;
background-repeat: repeat-x;
color: #404040;
/*
border-top-left-radius: 5px;
-moz-border-radius-topleft: 5px;
-khtml-border-top-left-radius: 5px;
-webkit-border-top-left-radius: 5px;
border-top-right-radius: 5px;
-moz-border-radius-topright: 5px;
-khtml-border-top-right-radius: 5px;
-webkit-border-top-right-radius: 5px;
*/
}
#tab_menu li a:hover {
border-top: 1px solid #ffffff;
border-right: 1px solid #ffffff;
border-left: 1px solid #ffffff;
background-position: 0 -65px;
}
#tab_menu li.active a {
border-top: 1px solid #ffffff;
border-right: 1px solid #ffffff;
border-left: 1px solid #ffffff;
border-bottom:1px solid #f7f7f7;
height: 28px;
text-shadow: 0px 1px 0px #fff;
background-position: 0 -101px;
background-color: #f4f4f4;
color: #000;
overflow: hidden;
}
#tab_menu li.active a:hover {
color: #505050;
}
/* Центральная часть страницы */
#middle {
width: 940px;
min-height: 300px;
padding: 30px;
background-color: #f7f7f7;
display: block;
border-left: 1px solid #ffffff;
border-right: 1px solid #ffffff;
border-bottom: 1px solid #ffffff;
overflow:hidden;
}
#middle h1 {
font-size: 27px;
font-weight: normal;
font-style: normal;
color: #000;
display: block;
float: left;
margin-right: 15px;
}
#middle h2 {
font-size: 22px;
font-weight: normal;
font-style: normal;
color: #000;
text-shadow: 0px 1px 0px #fff;
margin-bottom: 10px;
}
/* @group Заголовок правой части */
#header{
margin-bottom: 20px;
overflow: hidden;
}
#header .add {
display: block;
float: left;
width: auto;
font-size: 12px;
text-decoration: none;
padding: 7px 17px 7px 33px;
border: 1px solid #c0c0c0;
color: #5e5e5e;
background: #ffffff url(../images/plus.png) no-repeat 10px 6px;
border-radius: 15px;
-moz-border-radius: 15px;
-khtml-border-radius: 15px;
-webkit-border-radius: 15px;
white-space: nowrap;
margin-top: 3px;
}
.icons.cell a {
}
.icons.cell a:hover {
background-color: #e3e3e3;
}
.link-add {
display: inline-block;
width: auto;
font-size: 12px;
text-decoration: none;
padding: 1px 3px 1px 20px !important;
border: 1px solid #c0c0c0;
color: #5e5e5e;
background: #ffffff url(../images/plus.png) no-repeat 3px 3px;
background-size: 12px;
background-position: 3px center !important;
}
.link-add:hover {
background-color: #e3e3e3;
}
#header .add:hover {
color: #000;
}
a { color: #000; }
.dash_link {
cursor: pointer;
border-bottom: 1px dotted #4D4D4D;
font-weight: normal;
font-style: normal;
color: #4D4D4D;
text-decoration: none;
}
.move_zone {
display: block;
float: left;
background-image: url(../images/move_zone.png);
background-repeat: repeat;
margin: 0px;
cursor: move;
width: 20px;
height:16px;
}
.button_green, .button_red, .button_yellow{
height: 28px;
color: #ffffff;
font: 13px "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
background-color: #ffffff;
padding-right: 20px;
padding-left: 20px;
cursor: pointer;
border-radius: 5px;
-moz-border-radius: 5px;
-khtml-border-radius: 5px;
-webkit-border-radius: 5px;
}
.button_green:hover, .button_red:hover {
background-position: 0 -29px;
cursor: pointer;
}
.button_green {
background-image: url(../images/but_green.jpg);
border: 1px solid #459300;
text-shadow: -1px -1px 0px #459300;
}
.button_red {
background-image: url(../images/but_red.jpg);
border: 1px solid #d00000;
text-shadow: -1px -1px 0px #930000;
}
.button_yellow {
background-image: url(../images/but_yellow.jpg);
border: 1px solid #ffc600;
text-shadow: -1px -1px 0px #e79800;
}
#footer {
height: 40px;
margin-top: 30px;
cursor: pointer;
color: #ffffff;
}
#footer a{
color: #ffffff;
}
input[type=text] {font-size:13px;}
a.admin_bookmark
{
position:absolute;
left:3%;
top:0px;
width: 12px;
height: 35px;
background-image: url('../images/bookmark.gif');
background-repeat: no-repeat;
}

View File

@@ -0,0 +1,31 @@
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-size: 100%;
background: transparent;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after, q:before, q:after {
content: '';
content: none;
}
ins {
text-decoration: none;
}
del {
text-decoration: line-through;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
strong {
font-weight: bold;
}

1519
simpla/design/css/style.css Normal file

File diff suppressed because it is too large Load Diff

261
simpla/design/css/utils.css Normal file
View File

@@ -0,0 +1,261 @@
.text-monospace {font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important;}
.text-justify {text-align: justify !important;}
.text-wrap {white-space: normal !important;}
.text-nowrap {white-space: nowrap !important;}
.text-truncate {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
.text-left {text-align: left !important;}
.text-right {text-align: right !important;}
.text-center {text-align: center !important;}
.text-lowercase {text-transform: lowercase !important;}
.text-uppercase {text-transform: uppercase !important;}
.text-capitalize {text-transform: capitalize !important;}
.text-hide {font: 0/0 a;color: transparent;text-shadow: none;background-color: transparent;border: 0;}
.text-decoration-none {text-decoration: none !important;}
.text-break {word-break: break-word !important;word-wrap: break-word !important;}
.text-reset {color: inherit !important;}
.text-white {color: #fff !important;}
.text-primary {color: #007bff !important;}
a.text-primary:hover, a.text-primary:focus {color: #0056b3 !important;}
.text-secondary {color: #6c757d !important;}
a.text-secondary:hover, a.text-secondary:focus {color: #494f54 !important;}
.text-success {color: #28a745 !important;}
a.text-success:hover, a.text-success:focus {color: #19692c !important;}
.text-info {color: #17a2b8 !important;}
a.text-info:hover, a.text-info:focus {color: #0f6674 !important;}
.text-warning {color: #ffc107 !important;}
a.text-warning:hover, a.text-warning:focus {color: #ba8b00 !important;}
.text-danger {color: #dc3545 !important;}
a.text-danger:hover, a.text-danger:focus {color: #a71d2a !important;}
.text-light {color: #f8f9fa !important;}
a.text-light:hover, a.text-light:focus {color: #cbd3da !important;}
.text-dark {color: #343a40 !important;}
a.text-dark:hover, a.text-dark:focus {color: #121416 !important;}
.text-body {color: #212529 !important;}
.text-muted {color: #6c757d !important;}
.text-black-50 {color: rgba(0, 0, 0, 0.5) !important;}
.text-white-50 {color: rgba(255, 255, 255, 0.5) !important;}
.bg-white { background-color: #fff !important;}
.rounded { border-radius: 1rem }
.w-25 { width: 25% !important;}
.w-50 { width: 50% !important;}
.w-75 { width: 75% !important;}
.w-100 { width: 100% !important;}
.w-auto { width: auto !important;}
.h-25 { height: 25% !important;}
.h-50 { height: 50% !important;}
.h-75 { height: 75% !important;}
.h-100 { height: 100% !important;}
.h-auto { height: auto !important;}
.mw-100 { max-width: 100% !important;}
.mh-100 { max-height: 100% !important;}
.min-vw-100 { min-width: 100vw !important;}
.min-vh-100 { min-height: 100vh !important;}
.vw-100 { width: 100vw !important;}
.vh-100 { height: 100vh !important;}
.m-0 { margin: 0 !important;}
.mt-0, .my-0 { margin-top: 0 !important;}
.mr-0, .mx-0 { margin-right: 0 !important;}
.mb-0, .my-0 { margin-bottom: 0 !important;}
.ml-0, .mx-0 { margin-left: 0 !important;}
.m-1 { margin: 0.25rem !important;}
.mt-1, .my-1 { margin-top: 0.25rem !important;}
.mr-1, .mx-1 { margin-right: 0.25rem !important;}
.mb-1, .my-1 { margin-bottom: 0.25rem !important;}
.ml-1, .mx-1 { margin-left: 0.25rem !important;}
.m-2 { margin: 0.5rem !important;}
.mt-2, .my-2 { margin-top: 0.5rem !important;}
.mr-2, .mx-2 { margin-right: 0.5rem !important;}
.mb-2, .my-2 { margin-bottom: 0.5rem !important;}
.ml-2, .mx-2 { margin-left: 0.5rem !important;}
.m-3 {margin: 1rem !important;}
.mt-3, .my-3 {margin-top: 1rem !important;}
.mr-3, .mx-3 {margin-right: 1rem !important;}
.mb-3, .my-3 {margin-bottom: 1rem !important;}
.ml-3, .mx-3 {margin-left: 1rem !important;}
.m-4 {margin: 1.5rem !important;}
.mt-4, .my-4 {margin-top: 1.5rem !important;}
.mr-4, .mx-4 {margin-right: 1.5rem !important;}
.mb-4, .my-4 {margin-bottom: 1.5rem !important;}
.ml-4, .mx-4 {margin-left: 1.5rem !important;}
.m-5 {margin: 3rem !important;}
.mt-5, .my-5 {margin-top: 3rem !important;}
.mr-5, .mx-5 {margin-right: 3rem !important;}
.mb-5, .my-5 {margin-bottom: 3rem !important;}
.ml-5, .mx-5 {margin-left: 3rem !important;}
.p-0 {padding: 0 !important;}
.pt-0,.py-0 {padding-top: 0 !important;}
.pr-0,.px-0 {padding-right: 0 !important;}
.pb-0,.py-0 {padding-bottom: 0 !important;}
.pl-0,.px-0 {padding-left: 0 !important;}
.p-1 {padding: 0.25rem !important;}
.pt-1,.py-1 {padding-top: 0.25rem !important;}
.pr-1,.px-1 {padding-right: 0.25rem !important;}
.pb-1,.py-1 {padding-bottom: 0.25rem !important;}
.pl-1,.px-1 {padding-left: 0.25rem !important;}
.p-2 {padding: 0.5rem !important;}
.pt-2,.py-2 {padding-top: 0.5rem !important;}
.pr-2,.px-2 {padding-right: 0.5rem !important;}
.pb-2,.py-2 {padding-bottom: 0.5rem !important;}
.pl-2,.px-2 {padding-left: 0.5rem !important;}
.p-3 {padding: 1rem !important;}
.pt-3,.py-3 {padding-top: 1rem !important;}
.pr-3,.px-3 {padding-right: 1rem !important;}
.pb-3,.py-3 {padding-bottom: 1rem !important;}
.pl-3,.px-3 {padding-left: 1rem !important;}
.p-4 {padding: 1.5rem !important;}
.pt-4,.py-4 {padding-top: 1.5rem !important;}
.pr-4,.px-4 {padding-right: 1.5rem !important;}
.pb-4,.py-4 {padding-bottom: 1.5rem !important;}
.pl-4,.px-4 {padding-left: 1.5rem !important;}
.p-5 {padding: 3rem !important;}
.pt-5,.py-5 {padding-top: 3rem !important;}
.pr-5,.px-5 {padding-right: 3rem !important;}
.pb-5,.py-5 {padding-bottom: 3rem !important;}
.pl-5,.px-5 {padding-left: 3rem !important;}
.m-n1 {margin: -0.25rem !important;}
.mt-n1,.my-n1 {margin-top: -0.25rem !important;}
.mr-n1,.mx-n1 {margin-right: -0.25rem !important;}
.mb-n1,.my-n1 {margin-bottom: -0.25rem !important;}
.ml-n1,.mx-n1 {margin-left: -0.25rem !important;}
.m-n2 {margin: -0.5rem !important;}
.mt-n2,.my-n2 {margin-top: -0.5rem !important;}
.mr-n2,.mx-n2 {margin-right: -0.5rem !important;}
.mb-n2,.my-n2 {margin-bottom: -0.5rem !important;}
.ml-n2,.mx-n2 {margin-left: -0.5rem !important;}
.m-n3 {margin: -1rem !important;}
.mt-n3,.my-n3 {margin-top: -1rem !important;}
.mr-n3,.mx-n3 {margin-right: -1rem !important;}
.mb-n3,.my-n3 {margin-bottom: -1rem !important;}
.ml-n3,.mx-n3 {margin-left: -1rem !important;}
.m-n4 {margin: -1.5rem !important;}
.mt-n4,.my-n4 {margin-top: -1.5rem !important;}
.mr-n4,.mx-n4 {margin-right: -1.5rem !important;}
.mb-n4,.my-n4 {margin-bottom: -1.5rem !important;}
.ml-n4,.mx-n4 {margin-left: -1.5rem !important;}
.m-n5 {margin: -3rem !important;}
.mt-n5,.my-n5 {margin-top: -3rem !important;}
.mr-n5,.mx-n5 {margin-right: -3rem !important;}
.mb-n5,.my-n5 { margin-bottom: -3rem !important;}
.ml-n5,.mx-n5 {margin-left: -3rem !important;}
.m-auto {margin: auto !important;}
.mt-auto,.my-auto {margin-top: auto !important;}
.mr-auto,.mx-auto {margin-right: auto !important;}
.mb-auto,.my-auto {margin-bottom: auto !important;}
.ml-auto,.mx-auto {margin-left: auto !important;}
.clearfix::after {display: block;clear: both;content: "";}
.float-left {float: left !important;}
.float-right {float: right !important;}
.float-none {float: none !important;}
.stretched-link::after {position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1;content: "";}
.position-static {position: static !important;}
.position-relative {position: relative !important;}
.position-absolute {position: absolute !important;}
.position-fixed {position: fixed !important;}
.d-inline {display: inline !important;}
.d-inline-block {display: inline-block !important;}
.d-block {display: block !important;}
.d-grid {display: grid !important;}
.d-table {display: table !important;}
.d-table-row {display: table-row !important;}
.d-table-cell {display: table-cell !important;}
.d-flex {display: flex !important;}
.d-inline-flex {display: inline-flex !important;}
.d-none {display: none !important;}
.display-none {display: none;}
.flex-row {flex-direction: row !important;}
.flex-column {flex-direction: column !important;}
.flex-row-reverse {flex-direction: row-reverse !important;}
.flex-column-reverse {flex-direction: column-reverse !important;}
.flex-wrap {flex-wrap: wrap !important;}
.flex-nowrap {flex-wrap: nowrap !important;}
.flex-wrap-reverse {flex-wrap: wrap-reverse !important;}
.flex-fill {flex: 1 1 auto !important;}
.flex-grow-0 {flex-grow: 0 !important;}
.flex-grow-1 {flex-grow: 1 !important;}
.flex-shrink-0 {flex-shrink: 0 !important;}
.flex-shrink-1 {flex-shrink: 1 !important;}
.justify-content-start {justify-content: flex-start !important;}
.justify-content-end {justify-content: flex-end !important;}
.justify-content-center {justify-content: center !important;}
.justify-content-between {justify-content: space-between !important;}
.justify-content-around {justify-content: space-around !important;}
.align-items-start {align-items: flex-start !important;}
.align-items-end {align-items: flex-end !important;}
.align-items-center {align-items: center !important;}
.align-items-baseline {align-items: baseline !important;}
.align-items-stretch {align-items: stretch !important;}
.align-content-start {align-content: flex-start !important;}
.align-content-end {align-content: flex-end !important;}
.align-content-center {align-content: center !important;}
.align-content-between {align-content: space-between !important;}
.align-content-around {align-content: space-around !important;}
.align-content-stretch {align-content: stretch !important;}
.align-self-auto {align-self: auto !important;}
.align-self-start {align-self: flex-start !important;}
.align-self-end {align-self: flex-end !important;}
.align-self-center {align-self: center !important;}
.align-self-baseline {align-self: baseline !important;}
.align-self-stretch {align-self: stretch !important;}
.border {border: 1px solid #dee2e6 !important;}
.border-top {border-top: 1px solid #dee2e6 !important;}
.border-right {border-right: 1px solid #dee2e6 !important;}
.border-bottom {border-bottom: 1px solid #dee2e6 !important;}
.border-left {border-left: 1px solid #dee2e6 !important;}
.border-0 {border: 0 !important;}
.border-top-0 {border-top: 0 !important;}
.border-right-0 {border-right: 0 !important;}
.border-dark {border-color: #aaa !important;}
.stretched-link::after { position: absolute; top: 0;right: 0;bottom: 0;left: 0;z-index: 1;pointer-events: auto;content: "";background-color: rgba(0, 0, 0, 0);}
/* autocomplete */
.autocomplete-w1 {position:absolute; top:0px; left:0px; margin:6px 0 0 6px;}
.autocomplete { border:1px solid #999; background:#FFF; cursor:default; text-align:left; overflow:auto; min-width: 300px; margin:-2px 6px 6px -6px;}
.autocomplete .selected { background:#F0F0F0; }
.autocomplete div { padding:2px 5px; white-space:nowrap; }
.autocomplete strong { font-weight:normal; color:#3399FF; }
.autocomplete-suggestions {
overflow: auto;
/*overflow-y: auto;*/
min-width: 300px;
border:1px solid #999;
background: #fff;
margin:-1px 0 0 0;
}
.autocomplete-suggestions strong { color:#3399FF; }
.autocomplete-suggestion {
cursor: pointer;
margin:6px 5px;
white-space:nowrap;
}
/* формы */
form .form-group {
display: flex;
align-items: center;
margin-top: .5rem;
}
form .required:after {
content: '*';
color: red;
font-weight: bold;
}
.form-group label {
width: 50%;
}
.form-group input[type=text] {
box-sizing: border-box;
}

View File

@@ -0,0 +1,46 @@
{literal}
<link href="/js/file2/file.css?v=2" media="all" rel="stylesheet" type="text/css" />
<script src="/js/file2/uploader.js"></script>
<script src="/js/file2/file.js?v=21"></script>
<div class="clearfix" style="clear: both;"></div>
<hr />
<span class="btn fileinput-btn btn-info button_green" style="display: inline-block;" id="art-files-input"><i class="fa fa-plus"> Добавить файл</i>
<input type="file" multiple name="file"></span>
<div class="well2" style="margin-top: 10px;width: 90%;">
<div class="sx-form-images" style="margin-top: 20px;">
{/literal}
{foreach from=$action_photos item=ph}
<div class="sx-form-preview" style="" data-id="{$ph->id}">
<img src="{$ph->img}" style3="width: 120px">
<div class="sx-move-photo">
<img src="/images/move.png">
</div>
<div class="sx-remove-photo">
<button type="button" class="btn btn-danger btn-xs sx-form-image-remove" data-id="{$ph->id}"><b>X</b></button>
</div>
</div>
{/foreach}
{literal}
</div>
<div class="clearfix" style="clear:both"></div>
</div>
<script>
$(function(){
var sxFile = new sxFormFile();
{/literal}
sxFile.init({$post->id}, '/simpla/ajax/file_action.php');
{literal}
})
</script>
{/literal}

View File

@@ -0,0 +1,152 @@
{* Вкладки *}
{capture name=tabs}
<li><a href="index.php?module=BlogAdmin">Блог</a></li>
<li><a href="index.php?module=ArticlesAdmin">Примеры работ</a></li>
<li><a href="index.php?module=ArticleCategoriesAdmin">Категории примеров работ</a></li>
<li class="active"><a href="{url module=ActionsAdmin id=null page=null}">Акции</a></li>
<li><a href="{url module=MarkasAdmin id=null page=null}">Марки и модели</a></li>
{/capture}
{* Title *}
{$meta_title='Акции' scope=parent}
{* Поиск *}
{if $posts || $keyword}
<form method="get">
<div id="search">
<input type="hidden" name="module" value='BlogAdmin'>
<input class="search" type="text" name="keyword" value="{$keyword|escape}" />
<input class="search_button" type="submit" value=""/>
</div>
</form>
{/if}
{* Заголовок *}
<div id="header">
{if $keyword && $posts_count}
<h1>{$posts_count|plural:'Нашлась':'Нашлись':'Нашлись'} {$posts_count} {$posts_count|plural:'запись':'записей':'записи'}</h1>
{elseif $posts_count}
<h1>{$posts_count} {$posts_count|plural:'запись':'записей':'записи'} в акциях</h1>
{else}
<h1>Нет записей</h1>
{/if}
<a class="add" href="{url module=ActionsPostAdmin return=$smarty.server.REQUEST_URI}">Добавить запись</a>
</div>
{if $posts}
<div id="main_list">
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
<form id="form_list" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $posts as $post}
<div class="{if !$post->visible}invisible{/if} row">
<input type="hidden" name="positions[{$post->id}]" value="{$post->position}">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$post->id}" />
</div>
<div class="name cell">
<a href="{url module=ActionsPostAdmin id=$post->id return=$smarty.server.REQUEST_URI}">{$post->name|escape}</a>
<br>
{$post->date|date}
</div>
<div class="icons cell">
<a class="preview" title="Предпросмотр в новом окне" href="../actions/{$post->url}" target="_blank"></a>
<a class="enable" title="Активна" href="#"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="enable">Сделать видимыми</option>
<option value="disable">Сделать невидимыми</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
</div>
{/if}
{* On document load *}
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', 1-$('#list input[type="checkbox"][name*="check"]').attr('checked'));
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Скрыт/Видим
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'actions', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
// Подтверждение удаления
$("form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,212 @@
{capture name=tabs}
<li class="active"><a href="{url module=ActionsAdmin id=null page=null}">Акции</a></li>
{/capture}
{if $post->id}
{$meta_title = $post->name scope=parent}
{else}
{$meta_title = 'Новая акция' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<script src="design/js/jquery/datepicker/jquery.ui.datepicker-ru.js"></script>
<script>
$(function() {
$('input[name="date"]').datepicker({
regional:'ru'
});
// Автозаполнение мета-тегов
meta_title_touched = true;
meta_keywords_touched = true;
meta_description_touched = true;
url_touched = true;
update = {/literal}{if $post->url}true;{else}false;{/if}{literal}
if($('input[name="meta_title"]').val() == generate_meta_title() || $('input[name="meta_title"]').val() == '')
meta_title_touched = false;
if($('input[name="meta_keywords"]').val() == generate_meta_keywords() || $('input[name="meta_keywords"]').val() == '')
meta_keywords_touched = false;
if($('textarea[name="meta_description"]').val() == generate_meta_description() || $('textarea[name="meta_description"]').val() == '')
meta_description_touched = false;
if($('input[name="url"]').val() == generate_url() || $('input[name="url"]').val() == '')
url_touched = false;
$('input[name="meta_title"]').change(function() { meta_title_touched = true; });
$('input[name="meta_keywords"]').change(function() { meta_keywords_touched = true; });
$('textarea[name="meta_description"]').change(function() { meta_description_touched = true; });
$('input[name="url"]').change(function() { url_touched = true; });
$('input[name="name"]').keyup(function() { set_meta(); });
$('select[name="brand_id"]').change(function() { set_meta(); });
$('select[name="categories[]"]').change(function() { set_meta(); });
});
function set_meta()
{
if(!meta_title_touched && !update)
// $('input[name="meta_title"]').val(generate_meta_title());
if(!meta_keywords_touched && !update)
// $('input[name="meta_keywords"]').val(generate_meta_keywords());
if(!meta_description_touched && !update)
{
descr = $('textarea[name="meta_description"]');
descr.val(generate_meta_description());
descr.scrollTop(descr.outerHeight());
}
if(!url_touched && !update)
$('input[name="url"]').val(generate_url());
}
function generate_meta_title()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_keywords()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_description()
{
if(typeof(tinyMCE.get("annotation")) =='object')
{
description = tinyMCE.get("annotation").getContent().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
return description;
}
else
return $('textarea[name=annotation]').val().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
}
function generate_url()
{
url = $('input[name="name"]').val();
url = url.replace(/[\s]+/gi, '-');
url = translit(url);
url = url.replace(/[^0-9a-z_\-]+/gi, '').toLowerCase();
return url;
}
function translit(str)
{
var ru=("А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я").split("-")
var en=("A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch-'-'-Y-y-'-'-E-e-YU-yu-YA-ya").split("-")
var res = '';
for(var i=0, l=str.length; i<l; i++)
{
var s = str.charAt(i), n = ru.indexOf(s);
if(n >= 0) { res += en[n]; }
else { res += s; }
}
return res;
}
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success == 'added'}Запись добавлена{elseif $message_success == 'updated'}Запись обновлена{/if}</span>
<a class="link" target="_blank" href="../blog/{$post->url}">Открыть запись на сайте</a>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error == 'url_exists'}Запись с таким адресом уже существует{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$post->name|escape}"/>
<input name=id type="hidden" value="{$post->id|escape}"/>
<div class="checkbox">
<input name=visible value='1' type="checkbox" id="active_checkbox" {if $post->visible}checked{/if}/> <label for="active_checkbox">Активна</label>
</div>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block">
<ul>
<li><label class=property>Дата</label><input type=text name=date value='{$post->date|date}'></li>
</ul>
</div>
<div class="block layer">
<!-- Параметры страницы (The End)-->
<h2>Параметры страницы</h2>
<!-- Параметры страницы -->
<ul>
<li><label class=property>Адрес</label><div class="page_url"> /actions/</div><input name="url" class="page_url" type="text" value="{$post->url|escape}" /></li>
<li><label class=property>Заголовок</label><input name="meta_title" type="text" value="{$post->meta_title|escape}" /></li>
<li><label class=property>Ключевые слова</label><input name="meta_keywords" type="text" value="{$post->meta_keywords|escape}" /></li>
<li><label class=property>Описание</label><textarea name="meta_description" />{$post->meta_description|escape}</textarea></li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<!-- Изображение категории -->
<div class="block layer images">
<h2>Изображение</h2>
<input class='upload_image' name=image type=file>
<input type=hidden name="delete_image" value="">
{if $post->image}
<ul>
<li>
<a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a>
<img src="{$post->image|resizepost:100:100}" alt="" />
</li>
</ul>
{/if}
</div>
</div>
<!-- Правая колонка свойств товара (The End)-->
<!-- Описагние товара -->
<div class="block layer">
<h2>Краткое описание</h2>
<textarea name="annotation" class='editor_small'>{$post->annotation|escape}</textarea>
</div>
<div class="block">
<h2>Полное описание</h2>
<textarea name="body" class='editor_large'>{$post->text|escape}</textarea>
</div>
<!-- Описание товара (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
{if $post->id}{include file="action_photo.tpl"}{/if}
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,606 @@
{capture name=tabs}
<li><a href="index.php?module=BlogAdmin">Блог</a></li>
<li class="active"><a href="index.php?module=ArticlesAdmin">Статьи</a></li>
<li><a href="index.php?module=ArticleCategoriesAdmin">Категории статей</a></li>
<li><a href="{url module=MarkasAdmin id=null page=null}">Марки и модели</a></li>
{/capture}
{if $article->id}
{$meta_title = $article->name scope=parent}
{else}
{$meta_title = 'Новая статья' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<script src="design/js/jquery/datepicker/jquery.ui.datepicker-ru.js"></script>
<script src="design/js/autocomplete/jquery.autocomplete-min.js"></script>
<style>
.autocomplete-w1 {position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; }
.autocomplete { border:1px solid #999; background:#FFF; cursor:default; text-align:left; overflow-x:auto; min-width: 300px; overflow-y: auto; margin:-6px 6px 6px -6px; /* IE6 specific: */ _height:350px; _margin:0; _overflow-x:hidden; }
.autocomplete .selected { background:#F0F0F0; }
.autocomplete div { padding:2px 5px; white-space:nowrap; }
.autocomplete strong { font-weight:normal; color:#3399FF; }
</style>
<script>
$(function() {
// Удаление изображений
$(".images a.delete").click( function() {
$("input[name='delete_image']").val('1');
$(this).closest("ul").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Добавление категории
$('#product_categories .add').click(function() {
$("#product_categories ul li:last").clone(false).appendTo('#product_categories ul').fadeIn('slow').find("select[name*=categories]:last").focus();
$("#product_categories ul li:last span.add").hide();
$("#product_categories ul li:last span.delete").show();
return false;
});
// Удаление категории
$("#product_categories .delete").live('click', function() {
$(this).closest("li").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Удаление связанноq статьи
$(".related_articles a.delete").live('click', function() {
$(this).closest("div.row").fadeOut(200, function() { $(this).remove(); });
return false;
});
$(".related_markas a.delete").live('click', function() {
$(this).closest("div.row").fadeOut(200, function() { $(this).remove(); });
return false;
});
$(".related_models a.delete").live('click', function() {
$(this).closest("div.row").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Добавление связанной статьи
var new_related_article = $('#new_related_article').clone(true);
$('#new_related_article').remove().removeAttr('id');
$("input#related_articles").autocomplete({
serviceUrl:'ajax/search_articles.php',
minChars:0,
noCache: false,
onSelect:
function(value, data){
new_item = new_related_article.clone().appendTo('.related_articles');
new_item.removeAttr('id');
new_item.find('a.related_article_name').html(data.name);
new_item.find('a.related_article_name').attr('href', 'index.php?module=ArticleAdmin&id='+data.id);
new_item.find('input[name*="related_articles"]').val(data.id);
$("#related_articles").val('');
new_item.show();
},
fnFormatResult:
function(value, data, currentValue){
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
var new_related_marka = $('#new_related_marka').clone(true);
$('#new_related_marka').remove().removeAttr('id');
$("input#related_markas").autocomplete({
serviceUrl:'ajax/search_markas.php',
minChars:0,
noCache: false,
onSelect:
function(value, data){
new_item = new_related_marka.clone().appendTo('.related_markas');
new_item.removeAttr('id');
new_item.find('a.related_marka_name').html(data.name);
new_item.find('a.related_marka_name').attr('href', 'index.php?module=MarkaAdmin&id='+data.id);
new_item.find('input[name*="related_markas"]').val(data.id);
$("#related_markas").val('');
new_item.show();
},
fnFormatResult:
function(value, data, currentValue){
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
var new_related_model = $('#new_related_model').clone(true);
$('#new_related_model').remove().removeAttr('id');
$("input#related_models").autocomplete({
serviceUrl:'ajax/search_models.php',
minChars:0,
noCache: false,
onSelect:
function(value, data){
new_item = new_related_model.clone().appendTo('.related_models');
new_item.removeAttr('id');
new_item.find('a.related_model_name').html(data.name);
new_item.find('a.related_model_name').attr('href', 'index.php?module=ModelAdmin&id='+data.id);
new_item.find('input[name*="related_models"]').val(data.id);
$("#related_models").val('');
new_item.show();
},
fnFormatResult:
function(value, data, currentValue){
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
$(".related_pages a.delete").live('click', function() {
$(this).closest("div.row").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Добавление связанной статьи
var new_related_page = $('#new_related_page').clone(true);
$('#new_related_page').remove().removeAttr('id');
$("input#related_pages").autocomplete({
serviceUrl:'ajax/search_services.php',
minChars:0,
noCache: false,
onSelect:
function(value, data){
new_item = new_related_page.clone().appendTo('.related_pages');
new_item.removeAttr('id');
new_item.find('a.related_page_name').html(data.name);
new_item.find('a.related_page_name').attr('href', 'index.php?module=pageAdmin&id='+data.id);
new_item.find('input[name*="related_pages"]').val(data.id);
$("#related_pages").val('');
new_item.show();
},
fnFormatResult:
function(value, data, currentValue){
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
// Удаление связанного товара
$(".related_products a.delete").live('click', function() {
$(this).closest("div.row").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Добавление связанного товара
var new_related_product = $('#new_related_product').clone(true);
$('#new_related_product').remove().removeAttr('id');
$("input#related_products").autocomplete({
serviceUrl:'ajax/search_products.php',
minChars:0,
noCache: false,
onSelect:
function(value, data){
new_item = new_related_product.clone().appendTo('.related_products');
new_item.removeAttr('id');
new_item.find('a.related_product_name').html(data.name);
new_item.find('a.related_product_name').attr('href', 'index.php?module=ProductAdmin&id='+data.id);
new_item.find('input[name*="related_products"]').val(data.id);
$("#related_products").val('');
new_item.show();
},
fnFormatResult:
function(value, data, currentValue){
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
$('input[name="date"]').datepicker({
regional:'ru'
});
// Автозаполнение мета-тегов
meta_title_touched = true;
meta_keywords_touched = true;
meta_description_touched = true;
url_touched = false;
update = {/literal}{if $article->url}true;{else}false;{/if}{literal}
if($('input[name="meta_title"]').val() == generate_meta_title() || $('input[name="meta_title"]').val() == '')
meta_title_touched = false;
if($('input[name="meta_keywords"]').val() == generate_meta_keywords() || $('input[name="meta_keywords"]').val() == '')
meta_keywords_touched = false;
if($('textarea[name="meta_description"]').val() == generate_meta_description() || $('textarea[name="meta_description"]').val() == '')
meta_description_touched = false;
if($('input[name="url"]').val() == generate_url() || $('input[name="url"]').val() == '')
url_touched = false;
$('input[name="meta_title"]').change(function() { meta_title_touched = true; });
$('input[name="meta_keywords"]').change(function() { meta_keywords_touched = true; });
$('textarea[name="meta_description"]').change(function() { meta_description_touched = true; });
$('input[name="url"]').change(function() { url_touched = true; });
$('input[name="name"]').keyup(function() { set_meta(); });
$('select[name="brand_id"]').change(function() { set_meta(); });
$('select[name="categories[]"]').change(function() { set_meta(); });
});
function set_meta()
{
if(!meta_title_touched)
// $('input[name="meta_title"]').val(generate_meta_title());
if(!meta_keywords_touched)
// $('input[name="meta_keywords"]').val(generate_meta_keywords());
if(!meta_description_touched)
{
descr = $('textarea[name="meta_description"]');
// descr.val(generate_meta_description());
descr.scrollTop(descr.outerHeight());
}
if(!url_touched && !update)
$('input[name="url"]').val(generate_url());
}
function generate_meta_title()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_keywords()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_description()
{
if(typeof(tinyMCE.get("annotation")) =='object')
{
description = tinyMCE.get("annotation").getContent().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
return description;
}
else
return $('textarea[name=annotation]').val().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
}
function generate_url()
{
url = $('input[name="name"]').val();
url = url.replace(/[\s]+/gi, '-');
url = translit(url);
url = url.replace(/[^0-9a-z_\-]+/gi, '').toLowerCase();
return url;
}
function translit(str)
{
var ru=("А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я").split("-")
var en=("A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch-'-'-Y-y-'-'-E-e-YU-yu-YA-ya").split("-")
var res = '';
for(var i=0, l=str.length; i<l; i++)
{
var s = str.charAt(i), n = ru.indexOf(s);
if(n >= 0) { res += en[n]; }
else { res += s; }
}
return res;
}
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success == 'added'}Запись добавлена{elseif $message_success == 'updated'}Запись обновлена{/if}</span>
<a class="link" target="_blank" href="../article/{$article->url}">Открыть запись на сайте</a>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error == 'url_exists'}Запись с таким адресом уже существует{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$article->name|escape}"/>
<input name=id type="hidden" value="{$article->id|escape}"/>
<div class="checkbox">
<input name=visible value='1' type="checkbox" id="active_checkbox" {if $article->visible}checked{/if}/> <label for="active_checkbox">Активна</label>
</div>
</div>
{if $article->id && $article->firstCategory && $article->firstCategory->id == 3}
<div style="margin-top: -15px;margin-bottom: 10px;">
с формой заказа <a target="_blank" href="/{$config->worksUrl}/{$article->url|escape}/?showform=1">https://atomicgarage.ru/{$config->worksUrl}/{$article->url|escape}/?showform=1</a>
</div>
{/if}
<div id="product_categories" {if !$categories}style='display:none;'{/if}>
<label>Категория</label>
<div>
<ul>
{foreach name=categories from=$article_categories item=product_category}
<li>
<select name="categories[]">
{function name=category_select level=0}
{foreach from=$categories item=category}
<option {if !$category->visible}style="color:#999"{/if} value='{$category->id}' {if $category->id == $selected_id}selected{/if} category_name='{$category->name|escape}'>{section name=sp loop=$level}&nbsp;&nbsp;&nbsp;&nbsp;{/section}{$category->name|escape}</option>
{category_select categories=$category->subcategories selected_id=$selected_id level=$level+1}
{/foreach}
{/function}
{category_select categories=$categories selected_id=$product_category->id}
</select>
<span {if not $smarty.foreach.categories.first}style='display:none;'{/if} class="add"><i class="dash_link">Дополнительная категория</i></span>
<span {if $smarty.foreach.categories.first}style='display:none;'{/if} class="delete"><i class="dash_link">Удалить</i></span>
</li>
{/foreach}
</ul>
</div>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block">
<ul>
<li><label class=property>Дата</label><input type=text name=date value='{$article->date|date}'></li>
<!--<li><label class=property>Категория</label>
<select name="category_id">
<option value='0'>Корневая категория</option>
{function name=category_select level=0}
{foreach from=$cats item=cat}
{if $category->id != $cat->id}
<option value='{$cat->id}' {if $article->category_id == $cat->id}selected{/if}>{section name=sp loop=$level}&nbsp;&nbsp;&nbsp;&nbsp;{/section}{$cat->name}</option>
{category_select cats=$cat->subcategories level=$level+1}
{/if}
{/foreach}
{/function}
{category_select cats=$categories}
</select>
</li>-->
</ul>
</div>
<div class="block layer">
<!-- Параметры страницы (The End)-->
<h2>Параметры страницы</h2>
<!-- Параметры страницы -->
<ul>
<li>
<label class=property>Адрес</label><div class="page_url"> /article/</div><input name="url" class="page_url" type="text" value="{$article->url|escape}" />
</li>
<li><label class=property>Заголовок</label><input name="meta_title" type="text" value="{$article->meta_title|escape}" /></li>
<li><label class=property>Ключевые слова</label><input name="meta_keywords" type="text" value="{$article->meta_keywords|escape}" /></li>
<li><label class=property>Описание</label><textarea name="meta_description" />{$article->meta_description|escape}</textarea></li>
</ul>
<div class="block layer">
<h2>Связанные марки</h2>
<div id=list class="related_markas">
{foreach from=$related_markas item=related_article}
<div class="row">
<div class="name cell">
<input type=hidden name=related_markas[] value='{$related_article->id}'>
<a href="{url id=$related_article->id}">{$related_article->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_marka" class="row" style='display:none;'>
<div class="name cell">
<input type=hidden name=related_markas[] value=''>
<a class="related_marka_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name="" id='related_markas' class="input_autocomplete" placeholder='Выберите марку чтобы добавить ее'>
</div>
<div class="block layer">
<h2>Связанные модели</h2>
<div id=list class="related_models">
{foreach from=$related_models item=related_article}
<div class="row">
<div class="name cell">
<input type=hidden name=related_models[] value='{$related_article->id}'>
<a href="{url id=$related_article->id}">{$related_article->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_model" class="row" style='display:none;'>
<div class="name cell">
<input type=hidden name=related_models[] value=''>
<a class="related_model_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name="" id='related_models' class="input_autocomplete" placeholder='Выберите модель чтобы добавить ее'>
</div>
<div class="block layer">
<h2>Связанные услуги</h2>
<div id=list class="related_pages">
{foreach from=$related_pages item=related_page}
<div class="row">
<div class="name cell">
<input type=hidden name=related_pages[] value='{$related_page->id}'>
<a href="{url id=$related_page->id}">{$related_page->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_page" class="row" style='display:none;'>
<div class="name cell">
<input type=hidden name=related_pages[] value=''>
<a class="related_page_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name=related id='related_pages' class="input_autocomplete" placeholder='Выберите статью чтобы добавить ее'>
</div>
</div>
<!-- Параметры страницы (The End)-->
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<!-- Изображение категории -->
<div class="block layer images">
<h2>Изображение</h2>
<input class='upload_image' name=image type=file>
<input type=hidden name="delete_image" value="">
{if $article->image}
<ul>
<li>
<a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a>
<img src="{$article->image|resizepost:100:100}" alt="" />
</li>
</ul>
{/if}
</div>
<div class="block">
<h2>Связанные товары</h2>
<div id=list class="related_products">
{foreach from=$related_products item=related_product}
<div class="row">
<div class="name cell">
<input type=hidden name=related_products[] value='{$related_product->id}'>
<a href="/simpla/index.php?module=ProductAdmin&id={$related_product->id}">{$related_product->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_product" class="row" style='display:none;'>
<div class="name cell">
<input type=hidden name=related_products[] value=''>
<a class="related_product_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name=related id='related_products' class="input_autocomplete" placeholder='Выберите товар чтобы добавить его'>
</div>
<div class="block layer">
<h2>Связанные статьи</h2>
<div id=list class="related_articles">
{foreach from=$related_articles item=related_article}
<div class="row">
<div class="name cell">
<input type=hidden name=related_articles[] value='{$related_article->id}'>
<a href="{url id=$related_article->id}">{$related_article->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_article" class="row" style='display:none;'>
<div class="name cell">
<input type=hidden name=related_articles[] value=''>
<a class="related_article_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name=related id='related_articles' class="input_autocomplete" placeholder='Выберите статью чтобы добавить ее'>
</div>
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</div>
<!-- Правая колонка свойств товара (The End)-->
<!-- Описагние товара -->
<div class="block layer">
<h2>Краткое описание</h2>
<textarea name="annotation" class='editor_small'>{$article->annotation|escape}</textarea>
</div>
<div class="block">
<h2>Полное описание</h2>
<textarea name="body" class='editor_large'>{$article->text|escape}</textarea>
</div>
<!-- Описание товара (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
{if $article->id}{include file="article_photo.tpl"}{/if}
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,142 @@
{* Вкладки *}
{capture name=tabs}
<li><a href="index.php?module=BlogAdmin">Блог</a></li>
<li><a href="index.php?module=ArticlesAdmin">Примеры работ</a></li>
<li class="active"><a href="index.php?module=ArticleCategoriesAdmin">Категории примеров работ</a></li>
<li><a href="{url module=ActionsAdmin id=null page=null}">Акции</a></li>
<li><a href="{url module=MarkasAdmin id=null page=null}">Марки и модели</a></li>
{/capture}
{* Title *}
{$meta_title='Категории' scope=parent}
{* Заголовок *}
<div id="header">
<h1>Категории примеров работ</h1>
<a class="add" href="{url module=ArticleCategoryAdmin return=$smarty.server.REQUEST_URI}">Добавить категорию</a>
</div>
<!-- Заголовок (The End) -->
{if $categories}
<div id="main_list" class="categories">
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
{function name=categories_tree level=0}
{if $categories}
<div id="list" class="sortable">
{foreach $categories as $category}
<div class="{if !$category->visible}invisible{/if} row">
<div class="tree_row">
<input type="hidden" name="positions[{$category->id}]" value="{$category->position}">
<div class="move cell" style="margin-left:{$level*20}px"><div class="move_zone"></div></div>
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$category->id}" />
</div>
<div class="cell">
<a href="{url module=ArticleCategoryAdmin id=$category->id return=$smarty.server.REQUEST_URI}">{$category->name|escape}</a>
</div>
<div class="icons cell">
<a class="preview" title="Предпросмотр в новом окне" href="../articles/{$category->url}" target="_blank"></a>
<a class="enable" title="Активна" href="#"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{categories_tree categories=$category->subcategories level=$level+1}
</div>
{/foreach}
</div>
{/if}
{/function}
{categories_tree categories=$categories}
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="enable">Сделать видимыми</option>
<option value="disable">Сделать невидимыми</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
</div>
{else}
Нет категорий
{/if}
{literal}
<script>
$(function() {
// Сортировка списка
$(".sortable").sortable({
items:".row",
handle: ".move_zone",
tolerance:"pointer",
scrollSensitivity:40,
opacity:0.7,
axis: "y",
update:function()
{
$("#list_form input[name*='check']").attr('checked', false);
$("#list_form").ajaxSubmit();
}
});
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', 1-$('#list input[type="checkbox"][name*="check"]').attr('checked'));
});
// Показать категорию
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'article_category', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest("div.row").find('input[type="checkbox"][name*="check"]:first').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтвердить удаление
$("form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,233 @@
{capture name=tabs}
<li><a href="index.php?module=BlogAdmin">Блог</a></li>
<li><a href="index.php?module=ArticlesAdmin">Статьи</a></li>
<li class="active"><a href="index.php?module=ArticleCategoriesAdmin">Категории статей</a></li>
<li><a href="{url module=MarkasAdmin id=null page=null}">Марки и модели</a></li>
{/capture}
{if $category->id}
{$meta_title = $category->name scope=parent}
{else}
{$meta_title = 'Новая категория' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<script src="design/js/jquery/jquery.js"></script>
<script src="design/js/jquery/jquery-ui.min.js"></script>
<script src="design/js/autocomplete/jquery.autocomplete-min.js"></script>
<style>
.autocomplete-w1 { background:url(img/shadow.png) no-repeat bottom right; position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; }
.autocomplete { border:1px solid #999; background:#FFF; cursor:default; text-align:left; overflow-x:auto; min-width: 300px; overflow-y: auto; margin:-6px 6px 6px -6px; /* IE6 specific: */ _height:350px; _margin:0; _overflow-x:hidden; }
.autocomplete .selected { background:#F0F0F0; }
.autocomplete div { padding:2px 5px; white-space:nowrap; }
.autocomplete strong { font-weight:normal; color:#3399FF; }
</style>
<script>
$(function() {
// Удаление изображений
$(".images a.delete").click( function() {
$("input[name='delete_image']").val('1');
$(this).closest("ul").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Автозаполнение мета-тегов
meta_title_touched = true;
meta_keywords_touched = true;
meta_description_touched = true;
url_touched = false;
update = {/literal}{if $category->url}true;{else}false;{/if}{literal}
if($('input[name="meta_title"]').val() == generate_meta_title() || $('input[name="meta_title"]').val() == '')
meta_title_touched = false;
if($('input[name="meta_keywords"]').val() == generate_meta_keywords() || $('input[name="meta_keywords"]').val() == '')
meta_keywords_touched = false;
if($('textarea[name="meta_description"]').val() == generate_meta_description() || $('textarea[name="meta_description"]').val() == '')
meta_description_touched = false;
if($('input[name="url"]').val() == generate_url() || $('input[name="url"]').val() == '')
url_touched = false;
$('input[name="meta_title"]').change(function() { meta_title_touched = true; });
$('input[name="meta_keywords"]').change(function() { meta_keywords_touched = true; });
$('textarea[name="meta_description"]').change(function() { meta_description_touched = true; });
$('input[name="url"]').change(function() { url_touched = true; });
$('input[name="name"]').keyup(function() { set_meta(); });
});
function set_meta()
{
if(!meta_title_touched)
// $('input[name="meta_title"]').val(generate_meta_title());
if(!meta_keywords_touched)
// $('input[name="meta_keywords"]').val(generate_meta_keywords());
if(!meta_description_touched)
$('textarea[name="meta_description"]').val(generate_meta_description());
if(!url_touched && !update)
$('input[name="url"]').val(generate_url());
}
function generate_meta_title()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_keywords()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_description()
{
if(typeof(tinyMCE.get("description")) =='object')
{
description = tinyMCE.get("description").getContent().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
return description;
}
else
return $('textarea[name=description]').val().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
}
function generate_url()
{
url = $('input[name="name"]').val();
url = url.replace(/[\s]+/gi, '-');
url = translit(url);
url = url.replace(/[^0-9a-z_\-]+/gi, '').toLowerCase();
return url;
}
function translit(str)
{
var ru=("А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я").split("-")
var en=("A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch-'-'-Y-y-'-'-E-e-YU-yu-YA-ya").split("-")
var res = '';
for(var i=0, l=str.length; i<l; i++)
{
var s = str.charAt(i), n = ru.indexOf(s);
if(n >= 0) { res += en[n]; }
else { res += s; }
}
return res;
}
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='added'}Категория добавлена{elseif $message_success=='updated'}Категория обновлена{else}{$message_success}{/if}</span>
<a class="link" target="_blank" href="../articles/{$category->url}">Открыть категорию на сайте</a>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error=='url_exists'}Категория с таким адресом уже существует{else}{$message_error}{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$category->name|escape}"/>
<input name=id type="hidden" value="{$category->id|escape}"/>
<div class="checkbox">
<input name=visible value='1' type="checkbox" id="active_checkbox" {if $category->visible}checked{/if}/> <label for="active_checkbox">Активна</label>
</div>
</div>
<div id="product_categories">
<select name="parent_id">
<option value='0'>Корневая категория</option>
{function name=category_select level=0}
{foreach from=$cats item=cat}
{if $category->id != $cat->id}
<option value='{$cat->id}' {if $category->parent_id == $cat->id}selected{/if}>{section name=sp loop=$level}&nbsp;&nbsp;&nbsp;&nbsp;{/section}{$cat->name}</option>
{category_select cats=$cat->subcategories level=$level+1}
{/if}
{/foreach}
{/function}
{category_select cats=$categories}
</select>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block layer">
<h2>Параметры страницы</h2>
<ul>
<li><label class=property>Адрес</label><div class="page_url">/articles/</div><input name="url" class="page_url" type="text" value="{$category->url|escape}" /></li>
<li><label class=property>Заголовок</label><input name="meta_title" class="simpla_inp" type="text" value="{$category->meta_title|escape}" /></li>
<li><label class=property>Ключевые слова</label><input name="meta_keywords" class="simpla_inp" type="text" value="{$category->meta_keywords|escape}" /></li>
<li><label class=property>Описание</label><textarea name="meta_description" class="simpla_inp" />{$category->meta_description|escape}</textarea></li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
{*
<!-- Экспорт-->
<div class="block">
<h2>Экспорт товара</h2>
<ul>
<li><input id="exp_yad" type="checkbox" /> <label for="exp_yad">Яндекс Маркет</label> Бид <input class="simpla_inp" type="" name="" value="12" /> руб.</li>
<li><input id="exp_goog" type="checkbox" /> <label for="exp_goog">Google Base</label> </li>
</ul>
</div>
<!-- Свойства товара (The End)-->
*}
</div>
<div id="column_right">
<!-- Изображение категории -->
<div class="block layer images">
<h2>Изображение</h2>
<input class='upload_image' name=image type=file>
<input type=hidden name="delete_image" value="">
{if $category->image}
<ul>
<li>
<a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a>
<img src="{$category->image|resizepost:100:100}" alt="" />
</li>
</ul>
{/if}
</div>
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Описагние категории -->
<div class="block layer">
<h2>Описание</h2>
<textarea name="description" class="editor_large">{$category->description|escape}</textarea>
</div>
<!-- Описание категории (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,46 @@
{literal}
<link href="/js/file2/file.css?v=2" media="all" rel="stylesheet" type="text/css" />
<script src="/js/file2/uploader.js"></script>
<script src="/js/file2/file.js?v=3"></script>
<div class="clearfix" style="clear: both;"></div>
<hr />
<span class="btn fileinput-btn btn-info button_green" style="display: inline-block;" id="art-files-input"><i class="fa fa-plus"> Добавить файл</i>
<input type="file" multiple name="file"></span>
<div class="well2" style="margin-top: 10px;width: 90%;">
<div class="sx-form-images" style="margin-top: 20px;">
{/literal}
{foreach from=$article_photos item=ph}
<div class="sx-form-preview" style="" data-id="{$ph->id}">
<img src="{$ph->img}" style3="width: 120px">
<div class="sx-move-photo">
<img src="/images/move.png">
</div>
<div class="sx-remove-photo">
<button type="button" class="btn btn-danger btn-xs sx-form-image-remove" data-id="{$ph->id}"><b>X</b></button>
</div>
</div>
{/foreach}
{literal}
</div>
<div class="clearfix" style="clear:both"></div>
</div>
<script>
$(function(){
var sxFile = new sxFormFile();
{/literal}
sxFile.init({$article->id});
{literal}
})
</script>
{/literal}

View File

@@ -0,0 +1,173 @@
{* Вкладки *}
{capture name=tabs}
<li><a href="index.php?module=BlogAdmin">Блог</a></li>
<li class="active"><a href="index.php?module=ArticlesAdmin">Примеры работ</a></li>
<li><a href="index.php?module=ArticleCategoriesAdmin">Категории примеров работ</a></li>
<li><a href="{url module=ActionsAdmin id=null page=null}">Акции</a></li>
<li><a href="{url module=MarkasAdmin id=null page=null}">Марки и модели</a></li>
{/capture}
{* Title *}
{$meta_title='Статьи' scope=parent}
{* Поиск *}
{if $articles || $keyword}
<form method="get">
<div id="search">
<input type="hidden" name="module" value='ArticlesAdmin'>
<input class="search" type="text" name="keyword" value="{$keyword|escape}" />
<input class="search_button" type="submit" value=""/>
</div>
</form>
{/if}
{* Заголовок *}
<div id="header">
{if $keyword && $articles_count}
<h1>{$articles_count|plural:'Нашлась':'Нашлись':'Нашлись'} {$articles_count} {$articles_count|plural:'статья':'статье':'статьи'}</h1>
{elseif $articles_count}
<h1>{$articles_count} {$articles_count|plural:'статья':'статье':'статьи'}</h1>
{else}
<h1>Нет примеров работ</h1>
{/if}
<a class="add" href="{url module=ArticleAdmin return=$smarty.server.REQUEST_URI}">Добавить статью</a>
</div>
{if $articles}
<div id="main_list">
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
<form id="form_list" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $articles as $article}
<div class="{if !$article->visible}invisible{/if} row">
<input type="hidden" name="positions[{$article->id}]" value="{$article->position}">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$article->id}" />
</div>
<div class="name cell">
<a href="{url module=ArticleAdmin id=$article->id return=$smarty.server.REQUEST_URI}">{$article->name|escape}</a>
<br>
{$article->date|date}{$article->category} просмотров: {$article->visited}
</div>
<div class="icons cell">
<a class="preview" title="Предпросмотр в новом окне" href="../article/{$article->url}" target="_blank"></a>
<a class="enable" title="Активна" href="#"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="enable">Сделать видимыми</option>
<option value="disable">Сделать невидимыми</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
</div>
{/if}
<div id="right_menu">
<!-- Категории товаров -->
{function name=categories_tree}
{if $categories}
<ul>
{if $categories[0]->parent_id == 0}
<li {if !$category->id}class="selected"{/if}><a href="{url category_id=null brand_id=null}">Все категории</a></li>
{/if}
{foreach $categories as $c}
<li category_id="{$c->id}" {if $category->id == $c->id}class="selected"{else}class="droppable category"{/if}><a href='{url keyword=null brand_id=null page=null category_id={$c->id}}'>{$c->name}</a></li>
{categories_tree categories=$c->subcategories}
{/foreach}
</ul>
{/if}
{/function}
{categories_tree categories=$categories}
<!-- Категории товаров (The End)-->
</div>
{* On document load *}
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', 1-$('#list input[type="checkbox"][name*="check"]').attr('checked'));
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Скрыт/Видим
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'article', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
// Подтверждение удаления
$("form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

View File

@@ -0,0 +1,152 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('import', $manager->permissions)}<li><a href="index.php?module=ImportAdmin">Импорт</a></li>{/if}
{if in_array('export', $manager->permissions)}<li><a href="index.php?module=ExportAdmin">Экспорт</a></li>{/if}
<li class="active"><a href="index.php?module=BackupAdmin">Бекап</a></li>
{/capture}
{* Title *}
{$meta_title='Бекап' scope=parent}
{* Заголовок *}
<div id="header">
<h1>Бекап</h1>
{if $message_error != 'no_permission'}
<a class="add" href="">Создать бекап</a>
<form id="hidden" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<input type="hidden" name="action" value="">
<input type="hidden" name="name" value="">
</form>
{/if}
</div>
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success == 'created'}Бекап создан{elseif $message_success == 'restored'}Бекап восстановлен{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>
{if $message_error == 'no_permission'}Установите права на запись в папку {$backup_files_dir}
{else}{$message_error}{/if}
</span>
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $backups}
<div id="main_list">
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $backups as $backup}
<div class="row">
{if $message_error != 'no_permission'}
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$backup->name}"/>
</div>
{/if}
<div class="name cell">
<a href="files/backup/{$backup->name}">{$backup->name}</a>
({if $backup->size>1024*1024}{($backup->size/1024/1024)|round:2} МБ{else}{($backup->size/1024)|round:2} КБ{/if})
</div>
<div class="icons cell">
{if $message_error != 'no_permission'}
<a class="delete" title="Удалить" href="#"></a>
{/if}
</div>
<div class="icons cell">
<a class="restore" title="Восстановить этот бекап" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
{if $message_error != 'no_permission'}
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
{/if}
</form>
</div>
{/if}
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Восстановить
$("a.restore").click(function() {
file = $(this).closest(".row").find('[name*="check"]').val();
$('form#hidden input[name="action"]').val('restore');
$('form#hidden input[name="name"]').val(file);
$('form#hidden').submit();
return false;
});
// Создать бекап
$("a.add").click(function() {
$('form#hidden input[name="action"]').val('create');
$('form#hidden').submit();
return false;
});
$("form#hidden").submit(function() {
if($('input[name="action"]').val()=='restore' && !confirm('Текущие данные будут потеряны. Подтвердите восстановление'))
return false;
});
$("form#list_form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,136 @@
{* Вкладки *}
{capture name=tabs}
<li><a href="index.php?module=BannersAdmin&do=groups">Группы баннеров</a></li>
<li><a href="{$smarty.get.return}">Группа » {$banners_group->name}</a></li>
<li class="active"><a href="{$smarty.server.REQUEST_URI}">{if $banner->image}Изменить баннер » "{$banner->name}"{else}Добавить баннер{/if}</a></li>
{/capture}
{* Title *}
{$meta_title='Добавить баннер' scope=parent}
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
{* Заголовок *}
<div id="header">
<h1>{if $banner->image}Изменить баннер "{$banner->name}"{else}Добавить баннер{/if}</h1>{if $smarty.get.return and !$message_success and !$message_error}<a class="button_yellow" href="{$smarty.get.return}">Вернуться</a>{/if}
</div>
<link href="design/css/banners.css" rel="stylesheet" type="text/css" />
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='added'}Баннер добавлен{elseif $message_success=='updated'}Баннер изменен{else}{$message_success|escape}{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error=='error_uploading_image'}Ошибка загрузки изображения баннера{elseif $message_error=='empty_name'}Введите название баннера{elseif $message_error=='not_image'}Вы не указалии изображение баннера{elseif $message_error=='empty_url'}Вы не указали URL страницы на которую должен ссылаться баннер{else}{$message_error|escape}{/if}</span>
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if !$message_success}
{* Основная форма *}
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
{if $banner->image}<input type=hidden name="image_exist" value="yes">{/if}
<table><tr><td valign="top" style="padding:5px;">
<div class="checkbox">
<input name="visible" value="1" type="checkbox" {if $banner->visible}checked{/if}/> <label for="active_checkbox">Активен</label>
</div>
<div class="block layer">
<ul>
<li><label class=property>Название</label> <input type="text" class="simpla_inp" value="{$banner->name}" name="name"/></li>
<li><label class=property>Ссылка</label> <input type="text" class="simpla_inp" value="{$banner->url}" name="url"/></li>
<li><label class=property>Изображение баннера</label> <input type="file" class="simpla_inp" value="" name="image"" id="imageFile"/></li>
{if $smarty.get.group==1}<li>Ширина баннера 260px!</li>{/if}
<li><label class=property>Описание</label> <textarea class="simpla_inp" name="description"/>{$banner->description}</textarea></li>
</ul>
</div>
</td><td id="imageThumb">{if $banner->image}<img src="/{$config->banners_images_dir}{$banner->image}" alt="">{else}БАННЕР<span>изображение отсутсвует</span>{/if}
</td></tr></table>
<br />
<div class="block layer">
<table><tr><td valign="top" style="padding:5px;">
<h2>Баннер отображать на:</h2>
<input name="show_all_pages" value="1" type="checkbox" {if $banner->show_all_pages}checked{/if} id="show_all_pages"/> <label for="show_all_pages" class="property" style="display:inline;float:none;color:black;">Показывать на всех страницах сайта</label>
<br/><br/>
<ul>
<li>
<label class=property>На страницах:</label>
<select name="pages[]" multiple="multiple" size="10" style="width:450px;height:150px;">
<option value='0' {if !$banner->page_selected OR 0|in_array:$banner->page_selected}selected{/if}>Не показывать на страницах</option>
{foreach from=$pages item=page}
{if $page->name != ''}<option value='{$page->id}' {if $banner->page_selected AND $page->id|in_array:$banner->page_selected}selected{/if}>{$page->name|escape}</option>{/if}
{/foreach}
</select>
</li>
<li>
<label class=property>В брендах:</label>
<select name="brands[]" multiple="multiple" size="10" style="width:450px;height:150px;">
<option value='0' {if !$banner->brand_selected OR 0|in_array:$banner->brand_selected}selected{/if}>Не показывать в брендах</option>
{foreach from=$brands item=brand}
<option value='{$brand->id}' {if $banner->brand_selected AND $brand->id|in_array:$banner->brand_selected}selected{/if}>{$brand->name|escape}</option>
{/foreach}
</select>
</li>
</ul>
</td><td valign="top" style="padding-top:75px; width:50%">
<ul><li><label class=property>В категориях:</label>
<select name="categories[]" multiple="multiple" size="10" style="width:450px;height:325px;">
<option value='0' {if !$banner->category_selected OR 0|in_array:$banner->category_selected}selected{/if}>Не показывать в категориях</option>
{function name=category_select level=0}
{foreach from=$categories item=category}
<option value='{$category->id}' {if $selected AND $category->id|in_array:$selected}selected{/if}>{section name=sp loop=$level}&nbsp;&nbsp;&nbsp;&nbsp;{/section}{$category->name|escape}</option>
{category_select categories=$category->subcategories selected=$banner->category_selected level=$level+1}
{/foreach}
{/function}
{category_select categories=$categories selected=$banner->category_selected}
</select></li></ul>
</td></tr></table>
</div>
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
{literal}
<script>
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
// Loop through the FileList and render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) {
// Only process image files.
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
// Closure to capture the file information.
reader.onload = (function(theFile) {
return function(e) {
// Render thumbnail.
$("#imageThumb").html('<img valign="absmiddle" src="'+e.target.result+'" title="'+escape(theFile.name)+'"/>');
};
})(f);
// Read in the image file as a data URL.
reader.readAsDataURL(f);
}
}
document.getElementById('imageFile').addEventListener('change', handleFileSelect, false);
</script>
{/literal}
{/if}

View File

@@ -0,0 +1,56 @@
{* Вкладки *}
{capture name=tabs}
<li><a href="index.php?module=BannersAdmin&do=groups">Группы баннеров</a></li>
{/capture}
{* Title *}
{$meta_title='Добавить/редактировать группу баннеров' scope=parent}
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
{* Заголовок *}
<div id="header">
{if $smarty.get.return and !$message_success}<a class="button_yellow" href="{$smarty.get.return}">Вернуться</a>{/if}
</div>
<link href="design/css/banners.css" rel="stylesheet" type="text/css" />
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='added'}Группа "{$group->name}" добавлена{elseif $message_success=='updated'}Группа "{$group->name}" изменена{else}{$message_success|escape}{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error=='empty_name'}Введите название группы баннеров{else}{$message_error|escape}{/if}</span>
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if !$message_success}
<form method=post enctype="multipart/form-data">
<div class="cell group">
<div class="banner_wrapper">
<div class="group title"><a href="#">{if $action == 'add'}Добавить баннер{else}Редактировать баннер "{$group->name}"{/if}</a></div>
<form method="get">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div style="padding:10px 0;">
<label for="group_name" class="property">Название группы:</label>&nbsp;&nbsp;&nbsp;<input type="text" style="width:300px;" value="{$group->name}" name="name">
</div>
<div class="tip">
<input type="submit" style="float:none;" value="{if $action == 'add'}Добавить баннер{else}Редактировать"{/if}" id="submit" class="button_green button_save">
<input type="button" style="float:none;" value="Отменить" id="submit" class="button_red button_save" onclick="javascript:location.href='{$smarty.get.return}'">
</div></form>
</div>
</div>
</form>
{/if}

View File

@@ -0,0 +1,119 @@
{* Вкладки *}
{capture name=tabs}
<li class="active"><a href="index.php?module=BannersAdmin&do=groups">Группы баннеров</a></li>
{/capture}
{* Title *}
{$meta_title='Управление баннерами сайта' scope=parent}
<link href="design/css/banners.css" rel="stylesheet" type="text/css" />
<div id="header">
{if !$function}
<a class="add" href="{url module=BannersAdmin do=groups action=add return=$smarty.server.REQUEST_URI}">Создать группу баннеров</a><br/><br/><br/>
{/if}
</div>
{* Основная форма *}
{if $groups}
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $groups as $group}
<div class="row">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$group->id}"/>
</div>
<div class="cell group">
<div class="banner_wrapper" style="cursor:pointer;" onclick="javascript:location.href='{url module=BannersAdmin do=banners group=$group->id return=$smarty.server.REQUEST_URI}';">
<div class="group title">
<a href="{url module=BannersAdmin do=banners group=$group->id return=$smarty.server.REQUEST_URI}">{$group->name|escape}</a>
<span>Для отображения группы баннеров используйте вызов в шаблоне <span style="margin;0;padding:0;color:#000000">{literal}{get_banners group={/literal}{$group->id}}{literal}{if $banners_id{/literal}{$group->id}}...{literal}{/if}{/literal}</span></span>
</div>
<div>
Для вставки галлереи пиши {literal}{{/literal}gallery id={$group->id}{literal}}{/literal}
</div>
{if $group->banner}
<!--<div class="banner">
<img src="/{$config->banners_images_dir}{$group->banner->image}" alt="">
</div>-->
{/if}
<div class="tip">
{if !$group->banner_count}<span style="color:#b61919">{/if}В группе находится: {$group->banner_count} {$group->banner_count|plural:'баннер':'баннеров':'баннера'}{if !$group->banner_count}</span>{/if}<br>
{if $group->banner}
{$img_url=$config->root_url|cat:'/'|cat:$config->banners_images_dir|cat:$group->banner->image}{assign var="info" value=$img_url|getimagesize}
размер изображений баннеров:{$info.0}px X {$info.1}px
{/if}
</div>
</div>
</div>
<div class="icons cell">
<a class="edit" title="Изменить название группы" href="{url module=BannersAdmin do=groups action=edit id=$group->id return=$smarty.server.REQUEST_URI}"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>{/if}
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
{* On document load *}
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить группу
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest("div.row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтверждение удаления
$("form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,210 @@
{* Вкладки *}
{capture name=tabs}
<li><a href="index.php?module=BannersAdmin&do=groups">Группы баннеров</a></li><li class="active"><a href="index.php?module=BannersAdmin&do=banners">Группа » {$banners_group->name}</a></li>
{/capture}
{* Title *}
{$meta_title='Группа » '|cat:$banners_group->name|cat:' « Управление баннерами сайта' scope=parent}
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
{* Заголовок *}
<div id="header">
{if !$function}
<a class="add" href="{url module=BannersAdmin action=add return=$smarty.server.REQUEST_URI}">Добавить баннер</a><br/><br/><br/>
{/if}
{if $banners_count}
<h1>В группе {$banners_count} {$banners_count|plural:'баннер':'баннеров':'баннера'}</h1>{if $smarty.get.return and !$message_success and !$message_error}<a class="button_yellow" href="{$smarty.get.return}">Вернуться</a>{/if}
{else}
<h1>Нет баннеров</h1>
{/if}
</div>
<link href="design/css/banners.css" rel="stylesheet" type="text/css" />
{* Основная форма *}
{if $banners}
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $banners as $banner}
<div class="{if !$banner->visible}invisible{/if} row">
<input type="hidden" name="positions[{$banner->id}]" value="{$banner->position}">
<div class="move cell"><div class="move_zone"></div></div>
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$banner->id}"/>
</div>
<div class="cell banner">
<div class="banner_wrapper" style="cursor:pointer;" onclick="javascript:location.href='{url module=BannersAdmin action=edit id=$banner->id return=$smarty.server.REQUEST_URI}';">
<div class="title">
<a href="{url module=BannersAdmin action=edit id=$banner->id return=$smarty.server.REQUEST_URI}">
{$banner->name|escape}
</a>
</div>
<div class="banner">
{if $banner->image}
<img src="/{$banners_images_dir}{$banner->image}" alt="">
{/if}
</div>
{if $banner->image}
<div class="tip">
Размер изображения: {$img_url=$config->root_url|cat:'/'|cat:$config->banners_images_dir|cat:$banner->image}
{*assign var="info" value=$img_url|getimagesize*}
{*$info.0}px X {$info.1}px<br /> *}
Ссылается на страницу: <a href="{$banner->url}" title="">{$banner->url}</a>
{if $banner->show_all_pages}<br/><span style="font-family:Arial;font-weight:bold;color:green;">Отображается на всех страницах сайта</span>
{else}{if $banner->pages_count OR $banner->categories_count OR $banner->brands_count}Отображается:{/if}
{if $banner->pages_count}на {$banner->pages_count} {$banner->pages_count|plural:'странице':'страницах':'страницах'}, {/if}
{if $banner->categories_count}в {$banner->categories_count} {$banner->categories_count|plural:'категории':'категориях':'категориях'}, {/if}
{if $banner->brands_count}в {$banner->brands_count} {$banner->brands_count|plural:'бренде':'брендах':'брендах'}{/if}
{if !$banner->pages_count AND !$banner->categories_count AND !$banner->brands_count}<br/><span style="font-family:Arial;font-weight:bold;color:red">не отображается</span>{/if}
{/if}
</div>
{/if}
</div>
</div>
<div class="icons cell">
<a class="enable" {if $banner->visible == 1}title="Активен{else}Выключен{/if}" href="#"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="enable">Сделать видимыми</option>
<option value="disable">Сделать невидимыми</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>{/if}
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
{* On document load *}
{literal}
<script>
$(function() {
// Сортировка списка
$("#list").sortable({
items: ".row",
tolerance: "pointer",
handle: ".move_zone",
scrollSensitivity: 40,
opacity: 0.7,
helper: function(event, ui){
if($('input[type="checkbox"][name*="check"]:checked').size()<1) return ui;
var helper = $('<div/>');
$('input[type="checkbox"][name*="check"]:checked').each(function(){
var item = $(this).closest('.row');
helper.height(helper.height()+item.innerHeight());
if(item[0]!=ui[0]) {
helper.append(item.clone());
$(this).closest('.row').remove();
}
else {
helper.append(ui.clone());
item.find('input[type="checkbox"][name*="check"]').attr('checked', false);
}
});
return helper;
},
start: function(event, ui) {
if(ui.helper.children('.row').size()>0)
$('.ui-sortable-placeholder').height(ui.helper.height());
},
beforeStop:function(event, ui){
if(ui.helper.children('.row').size()>0){
ui.helper.children('.row').each(function(){
$(this).insertBefore(ui.item);
});
ui.item.remove();
}
},
update:function(event, ui)
{
$("#list_form input[name*='check']").attr('checked', false);
$("#list_form").ajaxSubmit(function() {
colorize();
});
}
});
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить товар
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest("div.row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Показать баннер
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest("div.row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'banner', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
// Подтверждение удаления
$("form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

152
simpla/design/html/blog.tpl Normal file
View File

@@ -0,0 +1,152 @@
{* Вкладки *}
{capture name=tabs}
<li class="active"><a href="index.php?module=BlogAdmin">Блог</a></li>
<li><a href="index.php?module=ArticlesAdmin">Примеры работ</a></li>
<li><a href="index.php?module=ArticleCategoriesAdmin">Категории примеров работ</a></li>
<li><a href="{url module=ActionsAdmin id=null page=null}">Акции</a></li>
<li><a href="{url module=MarkasAdmin id=null page=null}">Марки и модели</a></li>
{/capture}
{* Title *}
{$meta_title='Блог' scope=parent}
{* Поиск *}
{if $posts || $keyword}
<form method="get">
<div id="search">
<input type="hidden" name="module" value='BlogAdmin'>
<input class="search" type="text" name="keyword" value="{$keyword|escape}" />
<input class="search_button" type="submit" value=""/>
</div>
</form>
{/if}
{* Заголовок *}
<div id="header">
{if $keyword && $posts_count}
<h1>{$posts_count|plural:'Нашлась':'Нашлись':'Нашлись'} {$posts_count} {$posts_count|plural:'запись':'записей':'записи'}</h1>
{elseif $posts_count}
<h1>{$posts_count} {$posts_count|plural:'запись':'записей':'записи'} в блоге</h1>
{else}
<h1>Нет записей</h1>
{/if}
<a class="add" href="{url module=PostAdmin return=$smarty.server.REQUEST_URI}">Добавить запись</a>
</div>
{if $posts}
<div id="main_list">
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
<form id="form_list" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $posts as $post}
<div class="{if !$post->visible}invisible{/if} row">
<input type="hidden" name="positions[{$post->id}]" value="{$post->position}">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$post->id}" />
</div>
<div class="name cell">
<a href="{url module=PostAdmin id=$post->id return=$smarty.server.REQUEST_URI}">{$post->name|escape}</a>
<br>
{$post->date|date}
</div>
<div class="icons cell">
<a class="preview" title="Предпросмотр в новом окне" href="../blog/{$post->url}" target="_blank"></a>
<a class="enable" title="Активна" href="#"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="enable">Сделать видимыми</option>
<option value="disable">Сделать невидимыми</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
</div>
{/if}
{* On document load *}
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', 1-$('#list input[type="checkbox"][name*="check"]').attr('checked'));
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Скрыт/Видим
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'blog', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
// Подтверждение удаления
$("form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,206 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('products', $manager->permissions)}<li><a href="index.php?module=ProductsAdmin">Товары</a></li>{/if}
{if in_array('categories', $manager->permissions)}<li><a href="index.php?module=CategoriesAdmin">Категории</a></li>{/if}
<li class="active"><a href="index.php?module=BrandsAdmin">Бренды</a></li>
{if in_array('features', $manager->permissions)}<li><a href="index.php?module=FeaturesAdmin">Свойства</a></li>{/if}
{/capture}
{if $brand->id}
{$meta_title = $brand->name scope=parent}
{else}
{$meta_title = 'Новый бренд' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<script>
$(function() {
// Удаление изображений
$(".images a.delete").click( function() {
$("input[name='delete_image']").val('1');
$(this).closest("ul").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Автозаполнение мета-тегов
meta_title_touched = true;
meta_keywords_touched = true;
meta_description_touched = true;
url_touched = true;
if($('input[name="meta_title"]').val() == generate_meta_title() || $('input[name="meta_title"]').val() == '')
meta_title_touched = false;
if($('input[name="meta_keywords"]').val() == generate_meta_keywords() || $('input[name="meta_keywords"]').val() == '')
meta_keywords_touched = false;
if($('textarea[name="meta_description"]').val() == generate_meta_description() || $('textarea[name="meta_description"]').val() == '')
meta_description_touched = false;
if($('input[name="url"]').val() == generate_url() || $('input[name="url"]').val() == '')
url_touched = false;
$('input[name="meta_title"]').change(function() { meta_title_touched = true; });
$('input[name="meta_keywords"]').change(function() { meta_keywords_touched = true; });
$('input[textarea="meta_description"]').change(function() { meta_description_touched = true; });
$('input[name="url"]').change(function() { url_touched = true; });
$('input[name="name"]').keyup(function() { set_meta(); });
function set_meta()
{
if(!meta_title_touched)
$('input[name="meta_title"]').val(generate_meta_title());
if(!meta_keywords_touched)
$('input[name="meta_keywords"]').val(generate_meta_keywords());
if(!meta_description_touched)
$('textarea[name="meta_description"]').val(generate_meta_description());
if(!url_touched)
$('input[name="url"]').val(generate_url());
}
function generate_meta_title()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_keywords()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_description()
{
name = $('input[name="name"]').val();
return name;
}
function generate_url()
{
url = $('input[name="name"]').val();
url = url.replace(/[\s]+/gi, '-');
url = translit(url);
url = url.replace(/[^0-9a-z_\-]+/gi, '').toLowerCase();
return url;
}
function translit(str)
{
var ru=("А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я").split("-")
var en=("A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch-'-'-Y-y-'-'-E-e-YU-yu-YA-ya").split("-")
var res = '';
for(var i=0, l=str.length; i<l; i++)
{
var s = str.charAt(i), n = ru.indexOf(s);
if(n >= 0) { res += en[n]; }
else { res += s; }
}
return res;
}
});
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='added'}Бренд добавлен{elseif $message_success=='updated'}Бренд обновлен{else}{$message_success}{/if}</span>
<a class="link" target="_blank" href="../brands/{$brand->url}">Открыть бренд на сайте</a>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error=='url_exists'}Бренд с таким адресом уже существует{else}{$message_error}{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$brand->name|escape}"/>
<input name=id type="hidden" value="{$brand->id|escape}"/>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block layer">
<h2>Параметры страницы</h2>
<ul>
<li><label class=property>Адрес</label><div class="page_url"> /brands/</div><input name="url" class="page_url" type="text" value="{$brand->url|escape}" /></li>
<li><label class=property>Заголовок</label><input name="meta_title" class="simpla_inp" type="text" value="{$brand->meta_title|escape}" /></li>
<li><label class=property>Ключевые слова</label><input name="meta_keywords" class="simpla_inp" type="text" value="{$brand->meta_keywords|escape}" /></li>
<li><label class=property>Описание</label><textarea name="meta_description" class="simpla_inp" />{$brand->meta_description|escape}</textarea></li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
{*
<!-- Экспорт-->
<div class="block">
<h2>Экспорт товара</h2>
<ul>
<li><input id="exp_yad" type="checkbox" /> <label for="exp_yad">Яндекс Маркет</label> Бид <input class="simpla_inp" type="" name="" value="12" /> руб.</li>
<li><input id="exp_goog" type="checkbox" /> <label for="exp_goog">Google Base</label> </li>
</ul>
</div>
<!-- Свойства товара (The End)-->
*}
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<!-- Изображение категории -->
<div class="block layer images">
<h2>Изображение бренда</h2>
<input class='upload_image' name=image type=file>
<input type=hidden name="delete_image" value="">
{if $brand->image}
<ul>
<li>
<a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a>
<img src="../{$config->brands_images_dir}{$brand->image}" alt="" />
</li>
</ul>
{/if}
</div>
</div>
<!-- Правая колонка свойств товара (The End)-->
<!-- Описагние бренда -->
<div class="block layer">
<h2>Описание</h2>
<textarea name="description" class="editor_large">{$brand->description|escape}</textarea>
</div>
<!-- Описание бренда (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,119 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('products', $manager->permissions)}<li><a href="index.php?module=ProductsAdmin">Товары</a></li>{/if}
{if in_array('categories', $manager->permissions)}<li><a href="index.php?module=CategoriesAdmin">Категории</a></li>{/if}
<li class="active"><a href="index.php?module=BrandsAdmin">Бренды</a></li>
{if in_array('features', $manager->permissions)}<li><a href="index.php?module=FeaturesAdmin">Свойства</a></li>{/if}
{/capture}
{* Title *}
{$meta_title='Бренды' scope=parent}
{* Заголовок *}
<div id="header">
<h1>Бренды</h1>
<a class="add" href="{url module=BrandAdmin return=$smarty.server.REQUEST_URI}">Добавить бренд</a>
</div>
{if $brands}
<div id="main_list" class="brands">
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list" class="brands">
{foreach $brands as $brand}
<div class="row {if !$brand->visible}invisible{/if}">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$brand->id}" />
</div>
<div class="cell">
<a href="{url module=BrandAdmin id=$brand->id return=$smarty.server.REQUEST_URI}">{$brand->name|escape}</a>
</div>
<div class="icons cell">
<a class="enable" title="Активна" href="#"></a>
<a class="preview" title="Предпросмотр в новом окне" href="../brands/{$brand->url}" target="_blank"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
</div>
{else}
Нет брендов
{/if}
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'brands', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest("div.row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтверждение удаления
$("form").submit(function() {
if($('#list input[type="checkbox"][name*="check"]:checked').length>0)
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,125 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('comments', $manager->permissions)}<li><a href="index.php?module=CommentsAdmin">Комментарии</a></li>{/if}
{if in_array('feedbacks', $manager->permissions)}<li><a href="index.php?module=FeedbacksAdmin">Обратная связь</a></li>{/if}
<li class="active"><a href="index.php?module=CallbacksAdmin">Заказ обратного звонка</a></li>
{/capture}
{* Title *}
{$meta_title='Заказ обратного звонка' scope=parent}
{* Заголовок *}
<div id="header">
{if $callbacks_count}
<h1>{$callbacks_count} {$callbacks_count|plural:'заказ':'заказа':'заказов'}</h1>
{else}
<h1>Нет заказов</h1>
{/if}
</div>
<div id="main_list">
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
{if $callbacks}
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list" style="width:100%;">
{foreach $callbacks as $callback}
<div class="row">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$callback->id}" />
</div>
<div class="name cell">
<div class='comment_name'>
{$callback->name|escape}
</div>
<div class='comment_text'>
Телефон: {$callback->phone|escape|nl2br}
</div>
<div class='comment_text'>
Сообщение: {$callback->message|escape|nl2br}
</div>
<div class='comment_info'>
Заявка отправлена {$callback->date|date} в {$callback->date|time}
</div>
</div>
<div class="icons cell">
<a href='#' title='Удалить' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id='check_all' class='dash_link'>Выбрать все</label>
<span id=select>
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id='apply_action' class="button_green" type=submit value="Применить">
</div>
</form>
{else}
Нет сообщений
{/if}
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
</div>
<!-- Меню -->
<div id="right_menu">
</div>
<!-- Меню (The End) -->
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтверждение удаления
$("form#list_form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,198 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('products', $manager->permissions)}<li><a href="index.php?module=ProductsAdmin">Товары</a></li>{/if}
<li class="active"><a href="index.php?module=CategoriesAdmin">Категории</a></li>
{if in_array('brands', $manager->permissions)}<li><a href="index.php?module=BrandsAdmin">Бренды</a></li>{/if}
{if in_array('features', $manager->permissions)}<li><a href="index.php?module=FeaturesAdmin">Свойства</a></li>{/if}
{/capture}
{* Title *}
{$meta_title='Категории' scope=parent}
{* Заголовок *}
<div id="header">
<h1>Категории товаров</h1>
<a class="add" href="{url module=CategoryAdmin return=$smarty.server.REQUEST_URI}">Добавить категорию</a>
</div>
<!-- Заголовок (The End) -->
{if $categories}
<div id="main_list" class="categories">
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
{function name=categories_tree level=0}
{if $categories}
<div id="list" class="sortable">
{foreach $categories as $category}
<div class="{if !$category->visible}invisible{/if} row">
<div class="tree_row">
<input type="hidden" name="positions[{$category->id}]" value="{$category->position}">
<div class="move cell" style="margin-left:{$level*20}px"><div class="move_zone"></div></div>
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$category->id}" />
</div>
<div class="cell">
<a href="{url module=CategoryAdmin id=$category->id return=$smarty.server.REQUEST_URI}">{$category->name|escape}</a>
</div>
<div class="icons cell">
<a class="preview" title="Предпросмотр в новом окне" href="../catalog/{$category->url}" target="_blank"></a>
<!-- ЯМ -->
<input type="hidden" value="{$category->ym}" data="{$category->id}" name="ym[{$category->id}]" class="yandex{if $category->ym==1} enabled{/if}"/>
<a class="yandex" title="ЯМ" href="#"></a>
<a class="view{if !$category->menu} no{/if}" title="В меню" href="#"></a>
<a class="enable {$category->__css_class}" title="Активна" href="#"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{categories_tree categories=$category->subcategories level=$level+1}
</div>
{/foreach}
</div>
{/if}
{/function}
{categories_tree categories=$categories}
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="enable">Сделать видимыми</option>
<option value="disable">Сделать невидимыми</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
</div>
{else}
Нет категорий
{/if}
{literal}
<script>
$(function() {
// Сортировка списка
$(".sortable").sortable({
items:".row",
handle: ".move_zone",
tolerance:"pointer",
scrollSensitivity:40,
opacity:0.7,
axis: "y",
update:function()
{
$("#list_form input[name*='check']").attr('checked', false);
$("#list_form").ajaxSubmit();
}
});
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]:not(:disabled)').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:disabled):not(:checked)').length>0);
});
// Показать категорию
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'category', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
line.find('a.enable').toggleClass('a-invisible').toggleClass('a-visible');
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
$("a.view").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = icon.hasClass('no')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'categoryview', 'id': id, 'values': {'menu': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
icon.removeClass('no');
else
icon.addClass('no');
},
dataType: 'json'
});
return false;
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest("div.row").find('input[type="checkbox"][name*="check"]:first').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтвердить удаление
$("form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
// ЯМ от bwdesign.ru
function YMchangeRow(row){
var input = $(row).find("input.yandex");
if($(input).val()==1){
$(input).val(0);
$(input).removeClass('enabled')
}else{
$(input).val(1);
$(input).addClass('enabled')
}
updateYM();
}
function updateYM(){
var icon = $("a.yandex");
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/ym.php?type=cat',
data: $('form#list_form').serialize(),
success: function(data){
icon.removeClass('loading_icon');
},
dataType: 'json'
});
}
$("a.yandex").click(function() {
var th = $(this);
var row = $(th).closest("div.row");
YMchangeRow(row);
return false;
})
});
</script>
{/literal}

View File

@@ -0,0 +1,264 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('products', $manager->permissions)}<li><a href="index.php?module=ProductsAdmin">Товары</a></li>{/if}
<li class="active"><a href="index.php?module=CategoriesAdmin">Категории</a></li>
{if in_array('brands', $manager->permissions)}<li><a href="index.php?module=BrandsAdmin">Бренды</a></li>{/if}
{if in_array('features', $manager->permissions)}<li><a href="index.php?module=FeaturesAdmin">Свойства</a></li>{/if}
{/capture}
{if $category->id}
{$meta_title = $category->name scope=parent}
{else}
{$meta_title = 'Новая категория' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<script src="design/js/jquery/jquery.js"></script>
<script src="design/js/jquery/jquery-ui.min.js"></script>
<script src="design/js/autocomplete/jquery.autocomplete-min.js"></script>
<style>
.autocomplete-w1 { background:url(img/shadow.png) no-repeat bottom right; position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; }
.autocomplete { border:1px solid #999; background:#FFF; cursor:default; text-align:left; overflow-x:auto; min-width: 300px; overflow-y: auto; margin:-6px 6px 6px -6px; /* IE6 specific: */ _height:350px; _margin:0; _overflow-x:hidden; }
.autocomplete .selected { background:#F0F0F0; }
.autocomplete div { padding:2px 5px; white-space:nowrap; }
.autocomplete strong { font-weight:normal; color:#3399FF; }
</style>
<script>
$(function() {
// Удаление изображений
$(".images a.delete").click( function() {
$("input[name='delete_image']").val('1');
$(this).closest("ul").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Автозаполнение мета-тегов
meta_title_touched = true;
meta_keywords_touched = true;
meta_description_touched = true;
url_touched = true;
update = {/literal}{if $category->url}true;{else}false;{/if}{literal}
if($('input[name="meta_title"]').val() == generate_meta_title() || $('input[name="meta_title"]').val() == '')
meta_title_touched = false;
if($('input[name="meta_keywords"]').val() == generate_meta_keywords() || $('input[name="meta_keywords"]').val() == '')
meta_keywords_touched = false;
if($('textarea[name="meta_description"]').val() == generate_meta_description() || $('textarea[name="meta_description"]').val() == '')
meta_description_touched = false;
if($('input[name="url"]').val() == generate_url() || $('input[name="url"]').val() == '')
url_touched = false;
$('input[name="meta_title"]').change(function() { meta_title_touched = true; });
$('input[name="meta_keywords"]').change(function() { meta_keywords_touched = true; });
$('textarea[name="meta_description"]').change(function() { meta_description_touched = true; });
$('input[name="url"]').change(function() { url_touched = true; });
$('input[name="name"]').keyup(function() { set_meta(); });
});
function set_meta()
{
if(!meta_title_touched)
// $('input[name="meta_title"]').val(generate_meta_title());
if(!meta_keywords_touched)
// $('input[name="meta_keywords"]').val(generate_meta_keywords());
if(!meta_description_touched)
// $('textarea[name="meta_description"]').val(generate_meta_description());
if(!url_touched && !update)
$('input[name="url"]').val(generate_url());
}
function generate_meta_title()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_keywords()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_description()
{
if(typeof(tinyMCE.get("description")) =='object')
{
description = tinyMCE.get("description").getContent().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
return description;
}
else
return $('textarea[name=description]').val().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
}
function generate_url()
{
url = $('input[name="name"]').val();
url = url.replace(/[\s]+/gi, '-');
url = translit(url);
url = url.replace(/[^0-9a-z_\-]+/gi, '').toLowerCase();
return url;
}
function translit(str)
{
var ru=("А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я").split("-")
var en=("A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch-'-'-Y-y-'-'-E-e-YU-yu-YA-ya").split("-")
var res = '';
for(var i=0, l=str.length; i<l; i++)
{
var s = str.charAt(i), n = ru.indexOf(s);
if(n >= 0) { res += en[n]; }
else { res += s; }
}
return res;
}
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='added'}Категория добавлена{elseif $message_success=='updated'}Категория обновлена{else}{$message_success}{/if}</span>
<a class="link" target="_blank" href="../catalog/{$category->url}">Открыть категорию на сайте</a>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error=='url_exists'}Категория с таким адресом уже существует{else}{$message_error}{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$category->name|escape}"/>
<input name=id type="hidden" value="{$category->id|escape}"/>
<div class="checkbox">
<input name=visible value='1' type="checkbox" id="active_checkbox" {if $category->visible}checked{/if}/> <label for="active_checkbox">Активна</label>
</div>
<div class="checkbox">
<input name=ym value='1' type="checkbox" id="ym" {if $category->ym}checked{/if}/> <label for="ym">ЯМ</label>
</div>
<div class="checkbox">
<input name=menu value='1' type="checkbox" id="menu" {if $category->menu}checked{/if}/> <label for="menu">В меню</label>
</div>
</div>
<div id="product_categories">
<select name="parent_id">
<option value='0'>Корневая категория</option>
{function name=category_select level=0}
{foreach from=$cats item=cat}
{if $category->id != $cat->id}
<option value='{$cat->id}' {if $category->parent_id == $cat->id}selected{/if}>{section name=sp loop=$level}&nbsp;&nbsp;&nbsp;&nbsp;{/section}{$cat->name}</option>
{category_select cats=$cat->subcategories level=$level+1}
{/if}
{/foreach}
{/function}
{category_select cats=$categories}
</select>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block layer">
<h2>Параметры страницы</h2>
<ul>
<li><label class=property>Адрес</label><div class="page_url">/catalog/</div><input name="url" class="page_url" type="text" value="{$category->url|escape}" /></li>
<li><label class=property>Заголовок</label><input name="meta_title" class="simpla_inp" type="text" value="{$category->meta_title|escape}" /></li>
<li><label class=property>H1</label><input name="category_h1" class="simpla_inp" type="text" value="{$category->category_h1|escape}" /></li>
<li><label class=property>Ключевые слова</label><input name="meta_keywords" class="simpla_inp" type="text" value="{$category->meta_keywords|escape}" /></li>
<li><label class=property>Описание</label><textarea name="meta_description" class="simpla_inp" />{$category->meta_description|escape}</textarea></li>
<li><label class=property>Название в меню</label><input name="menu_name" class="simpla_inp" type="text" value="{$category->menu_name|escape}" /></li>
<li><label class=property>Товары из подразделов</label>
<input name="from_subs" value='1' type="checkbox" id="from_subs" {if $category->from_subs}checked{/if} />
</li>
<li><label class=property>Вид подразделов</label>
<select name="how2show">
<option value="1" {if $category->how2show == 1}selected{/if}>большие блоки</option>
<option value="2" {if $category->how2show == 2}selected{/if}>маленькие блоки</option>
<option value="3" {if $category->how2show == 3}selected{/if}>список</option>
</select>
</li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
{*
<!-- Экспорт-->
<div class="block">
<h2>Экспорт товара</h2>
<ul>
<li><input id="exp_yad" type="checkbox" /> <label for="exp_yad">Яндекс Маркет</label> Бид <input class="simpla_inp" type="" name="" value="12" /> руб.</li>
<li><input id="exp_goog" type="checkbox" /> <label for="exp_goog">Google Base</label> </li>
</ul>
</div>
<!-- Свойства товара (The End)-->
*}
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<!-- Изображение категории -->
<div class="block layer images">
<h2>Изображение категории</h2>
<input class='upload_image' name=image type=file>
<input type=hidden name="delete_image" value="">
{if $category->image}
<ul>
<li>
<a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a>
<img src="../{$config->categories_images_dir}{$category->image}" alt="" />
</li>
</ul>
{/if}
</div>
</div>
<!-- Правая колонка свойств товара (The End)-->
<div class="block layer">
<h2>Анонс</h2>
<textarea name="anons" style="width: 100%;height:150px" >{$category->anons|escape}</textarea>
</div>
<!-- Описагние категории -->
<div class="block layer">
<h2>Описание</h2>
<textarea name="description" class="editor_large">{$category->description|escape}</textarea>
</div>
<!-- Описание категории (The End)-->
<div class="block layer">
<h2>Текст внизу</h2>
<textarea name="text_bottom" class="editor_large">{$category->text_bottom|escape}</textarea>
</div>
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,178 @@
{* Вкладки *}
{capture name=tabs}
<li class="active"><a href="index.php?module=CommentsAdmin">Комментарии</a></li>
<li><a href="index.php?module=FeedbacksAdmin">Обратная связь</a></li>
{/capture}
{* Title *}
{$meta_title='Комментарии' scope=parent}
{* Поиск *}
{if $comments || $keyword}
<form method="get">
<div id="search">
<input type="hidden" name="module" value='CommentsAdmin'>
<input class="search" type="text" name="keyword" value="{$keyword|escape}" />
<input class="search_button" type="submit" value=""/>
</div>
</form>
{/if}
{* Заголовок *}
<div id="header">
{if $keyword && $comments_count}
<h1>{$comments_count|plural:'Нашелся':'Нашлось':'Нашлись'} {$comments_count} {$comments_count|plural:'комментарий':'комментариев':'комментария'}</h1>
{elseif !$type}
<h1>{$comments_count} {$comments_count|plural:'комментарий':'комментариев':'комментария'}</h1>
{elseif $type=='product'}
<h1>{$comments_count} {$comments_count|plural:'комментарий':'комментариев':'комментария'} к товарам</h1>
{elseif $type=='blog'}
<h1>{$comments_count} {$comments_count|plural:'комментарий':'комментариев':'комментария'} к записям в блоге</h1>
{elseif $type=='article'}
<h1>{$comments_count} {$comments_count|plural:'комментарий':'комментариев':'комментария'} к статьям</h1>
{/if}
</div>
{if $comments}
<div id="main_list">
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list" class="sortable">
{foreach $comments as $comment}
<div class="{if !$comment->approved}unapproved{/if} row">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$comment->id}"/>
</div>
<div class="name cell">
<div class="comment_name">
{$comment->name|escape}
<a class="approve" href="#">Одобрить</a>
</div>
<div class="comment_text">
{$comment->text|escape|nl2br}
</div>
<div class="comment_info">
Комментарий оставлен {$comment->date|date} в {$comment->date|time}
{if $comment->type == 'product'}
к товару <a target="_blank" href="{$config->root_url}/products/{$comment->product->url}#comment_{$comment->id}">{$comment->product->name}</a>
{elseif $comment->type == 'blog'}
к записи <a target="_blank" href="{$config->root_url}/blog/{$comment->post->url}#comment_{$comment->id}">{$comment->post->name}</a>
{elseif $comment->type == 'article'}
к статье <a target="_blank" href="{$config->root_url}/article/{$comment->article->url}#comment_{$comment->id}">{$comment->article->name}</a>
{/if}
</div>
</div>
<div class="icons cell">
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
Выбрать <label id="check_all" class="dash_link">все</label> или <label id="check_unapproved" class="dash_link">ожидающие</label>
<span id="select">
<select name="action">
<option value="approve">Одобрить</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
</div>
{else}
Нет комментариев
{/if}
<!-- Меню -->
<div id="right_menu">
<!-- Категории товаров -->
<ul>
<li {if !$type}class="selected"{/if}><a href="{url type=null}">Все комментарии</a></li>
</ul>
<ul>
<li {if $type == 'product'}class="selected"{/if}><a href='{url keyword=null type=product}'>К товарам</a></li>
<li {if $type == 'blog'}class="selected"{/if}><a href='{url keyword=null type=blog}'>К блогу</a></li>
<li {if $type == 'article'}class="selected"{/if}><a href='{url keyword=null type=article}'>К статьям</a></li>
</ul>
<!-- Категории товаров (The End)-->
</div>
<!-- Меню (The End) -->
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', 1-$('#list input[type="checkbox"][name*="check"]').attr('checked'));
});
// Выделить ожидающие
$("#check_unapproved").click(function() {
$('#list .unapproved input[type="checkbox"][name*="check"]').attr('checked', 1-$('#list .unapproved input[type="checkbox"][name*="check"]').attr('checked'));
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Одобрить
$("a.approve").click(function() {
var line = $(this).closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'comment', 'id': id, 'values': {'approved': 1}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
line.removeClass('unapproved');
},
dataType: 'json'
});
return false;
});
$("form#list_form").submit(function() {
if($('#list_form select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,110 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('users', $manager->permissions)}<li><a href="index.php?module=UsersAdmin">Покупатели</a></li>{/if}
{if in_array('groups', $manager->permissions)}<li><a href="index.php?module=GroupsAdmin">Группы</a></li>{/if}
<li class="active"><a href="index.php?module=CouponsAdmin">Купоны</a></li>
{/capture}
{if $coupon->code}
{$meta_title = $coupon->code scope=parent}
{else}
{$meta_title = 'Новый купон' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
<script src="design/js/jquery/datepicker/jquery.ui.datepicker-ru.js"></script>
{literal}
<script>
$(function() {
$('input[name="expire"]').datepicker({
regional:'ru'
});
$('input[name="end"]').datepicker({
regional:'ru'
});
// On change date
$('input[name="expire"]').focus(function() {
$('input[name="expires"]').attr('checked', true);
});
});
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success == 'added'}Купон добавлен{elseif $message_success == 'updated'}Купон изменен{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error == 'code_exists'}Купон с таким кодом уже существует{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name="code" type="text" value="{$coupon->code|escape}"/>
<input name="id" class="name" type="hidden" value="{$coupon->id|escape}"/>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<div class="block layer">
<ul>
<li>
<label class=property>Скидка</label><input name="value" class="coupon_value" type="text" value="{$coupon->value|escape}" />
<select class="coupon_type" name="type">
<option value="percentage" {if $coupon->type=='percentage'}selected{/if}>%</option>
<option value="absolute" {if $coupon->type=='absolute'}selected{/if}>{$currency->sign}</option>
</select>
</li>
<li>
<label class=property>Для заказов от</label>
<input class="coupon_value" type="text" name="min_order_price" value="{$coupon->min_order_price|escape}"> {$currency->sign}
</li>
<li>
<label class=property for="single"></label>
<input type="checkbox" name="single" id="single" value="1" {if $coupon->single==1}checked{/if}> <label for="single">одноразовый</label>
</li>
</ul>
</div>
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<div class="block layer">
<ul>
<li><label class=property><input type=checkbox name="expires" value="1" {if $coupon->expire}checked{/if}>Истекает</label><input type=text name=expire value='{$coupon->expire|date}'></li>
</ul>
</div>
</div>
<!-- Правая колонка свойств товара (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,141 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('users', $manager->permissions)}<li><a href="index.php?module=UsersAdmin">Покупатели</a></li>{/if}
{if in_array('groups', $manager->permissions)}<li><a href="index.php?module=GroupsAdmin">Группы</a></li>{/if}
<li class="active"><a href="index.php?module=CouponsAdmin">Купоны</a></li>
{/capture}
{* Title *}
{$meta_title='Купоны' scope=parent}
{* Заголовок *}
<div id="header">
{if $coupons_count}
<h1>{$coupons_count} {$coupons_count|plural:'купон':'купонов':'купона'}</h1>
{else}
<h1>Нет купонов</h1>
{/if}
<a class="add" href="{url module=CouponAdmin return=$smarty.server.REQUEST_URI}">Новый купон</a>
</div>
{if $coupons}
<div id="main_list">
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
<form id="form_list" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $coupons as $coupon}
<div class="{if $coupon->valid}green{/if} row">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$coupon->id}"/>
</div>
<div class="coupon_name cell">
<a href="{url module=CouponAdmin id=$coupon->id return=$smarty.server.REQUEST_URI}">{$coupon->code}</a>
</div>
<div class="coupon_discount cell">
Скидка {$coupon->value*1} {if $coupon->type=='absolute'}{$currency->sign}{else}%{/if}<br>
{if $coupon->min_order_price>0}
<div class="detail">
Для заказов от {$coupon->min_order_price|escape} {$currency->sign}
</div>
{/if}
</div>
<div class="coupon_details cell">
{if $coupon->single}
<div class="detail">
Одноразовый
</div>
{/if}
{if $coupon->usages>0}
<div class="detail">
Использован {$coupon->usages|escape} {$coupon->usages|plural:'раз':'раз':'раза'}
</div>
{/if}
{if $coupon->expire}
<div class="detail">
{if $smarty.now|date_format:'%Y%m%d' <= $coupon->expire|date_format:'%Y%m%d'}
Действует до {$coupon->expire|date}
{else}
Истёк {$coupon->expire|date}
{/if}
</div>
{/if}
</div>
<div class="icons cell">
<a href='#' class=delete></a>
</div>
<div class="name cell" style='white-space:nowrap;'>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
</div>
{/if}
{* On document load *}
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', 1-$('#list input[type="checkbox"][name*="check"]').attr('checked'));
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтверждение удаления
$("form").submit(function() {
if($('#list input[type="checkbox"][name*="check"]:checked').length>0)
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,192 @@
{capture name=tabs}
{if in_array('settings', $manager->permissions)}<li><a href="index.php?module=SettingsAdmin">Настройки</a></li>{/if}
<li class="active"><a href="index.php?module=CurrencyAdmin">Валюты</a></li>
{if in_array('delivery', $manager->permissions)}<li><a href="index.php?module=DeliveriesAdmin">Доставка</a></li>{/if}
{if in_array('payment', $manager->permissions)}<li><a href="index.php?module=PaymentMethodsAdmin">Оплата</a></li>{/if}
{if in_array('managers', $manager->permissions)}<li><a href="index.php?module=ManagersAdmin">Менеджеры</a></li>{/if}
{if in_array('maillist', $manager->permissions)}<li><a href="index.php?module=MailingMethodsAdmin">Рассылка</a></li>{/if}
{/capture}
{$meta_title = 'Валюты' scope=parent}
{* On document load *}
{literal}
<script src="design/js/jquery/jquery.js"></script>
<script src="design/js/jquery/jquery-ui.min.js"></script>
<script>
$(function() {
// Сортировка списка
// Сортировка вариантов
$("#currencies_block").sortable({ items: 'ul.sortable' , axis: 'y', cancel: '#header', handle: '.move_zone' });
// Добавление валюты
var curr = $('#new_currency').clone(true);
$('#new_currency').remove().removeAttr('id');
$('a#add_currency').click(function() {
$(curr).clone(true).appendTo('#currencies').fadeIn('slow').find("input[name*=currency][name*=name]").focus();
return false;
});
// Скрыт/Видим
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest("ul");
var id = line.find('input[name*="currency[id]"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'currency', 'id': id, 'values': {'enabled': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
// Центы
$("a.cents").click(function() {
var icon = $(this);
var line = icon.closest("ul");
var id = line.find('input[name*="currency[id]"]').val();
var state = line.hasClass('cents')?0:2;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'currency', 'id': id, 'values': {'cents': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(!state)
line.removeClass('cents');
else
line.addClass('cents');
},
error: function (xhr, ajaxOptions, thrownError){
alert(xhr.status);
alert(thrownError);
},
dataType: 'json'
});
return false;
});
// Показать центы
$("a.delete").click(function() {
$('input[type="hidden"][name="action"]').val('delete');
$('input[type="hidden"][name="action_id"]').val($(this).closest("ul").find('input[type="hidden"][name*="currency[id]"]').val());
$(this).closest("form").submit();
});
// Запоминаем id первой валюты, чтобы определить изменение базовой валюты
var base_currency_id = $('input[name*="currency[id]"]').val();
$("form").submit(function() {
if($('input[type="hidden"][name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
if(base_currency_id != $('input[name*="currency[id]"]:first').val() && confirm('Пересчитать все цены в '+$('input[name*="name"]:first').val()+' по текущему курсу?', 'msgBox Title'))
$('input[name="recalculate"]').val(1);
});
});
</script>
{/literal}
<!-- Заголовок -->
<div id="header">
<h1>Валюты</h1>
<a class="add" id="add_currency" href="#">Добавить</a>
<!-- Заголовок (The End) -->
</div>
<form method=post>
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<!-- Валюты -->
<div id="currencies_block">
<ul id="header">
<li class="move"></li>
<li class="name">Название валюты</li>
<li class="icons"></li>
<li class="sign">Знак</li>
<li class="iso">Код ISO</li>
</ul>
<div id="currencies">
{foreach from=$currencies item=c}
<ul class="sortable {if !$c->enabled}invisible{/if} {if $c->cents == 2}cents{/if}">
<li class="move"><div class="move_zone"></div></li>
<li class="name">
<input name="currency[id][{$c->id}]" type="hidden" value="{$c->id|escape}" /><input name="currency[name][{$c->id}]" type="" value="{$c->name|escape}" />
</li>
<li class="icons">
<a class="cents" href="#" title="Выводить копейки"></a>
<a class="enable" href="#" title="Показывать на сайте"></a>
</li>
<li class="sign"> <input name="currency[sign][{$c->id}]" type="text" value="{$c->sign|escape}" /></li>
<li class="iso"> <input name="currency[code][{$c->id}]" type="text" value="{$c->code|escape}" /></li>
<li class="rate">
{if !$c@first}
<div class=rate_from><input name="currency[rate_from][{$c->id}]" type="text" value="{$c->rate_from|escape}" /> {$c->sign}</div>
<div class=rate_to>= <input name="currency[rate_to][{$c->id}]" type="text" value="{$c->rate_to|escape}" /> {$currency->sign}</div>
{else}
<input name="currency[rate_from][{$c->id}]" type="hidden" value="{$c->rate_from|escape}" />
<input name="currency[rate_to][{$c->id}]" type="hidden" value="{$c->rate_to|escape}" />
{/if}
</li>
<li class="icons">
{if !$c@first}
<a class="delete" href="#" title="Удалить"></a>
{/if}
</li>
</ul>
{/foreach}
<ul id="new_currency" style='display:none;'>
<li class="move"><div class="move_zone"></div></li>
<li class="name"><input name="currency[id][]" type="hidden" value="" /><input name="currency[name][]" type="" value="" /></li>
<li class="icons">
</li>
<li class="sign"><input name="currency[sign][]" type="" value="" /></li>
<li class="iso"><input name="currency[code][]" type="" value="" /></li>
<li class="rate">
<div class=rate_from><input name="currency[rate_from][]" type="text" value="1" /> </div>
<div class=rate_to>= <input name="currency[rate_to][]" type="text" value="1" /> {$currency->sign|escape}</div>
</li>
<li class="icons">
</li>
</ul>
</div>
</div>
<!-- Валюты (The End)-->
<div id="action">
<input type=hidden name=recalculate value='0'>
<input type=hidden name=action value=''>
<input type=hidden name=action_id value=''>
<input id='apply_action' class="button_green" type=submit value="Применить">
</div>
</form>

View File

@@ -0,0 +1,171 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('settings', $manager->permissions)}<li><a href="index.php?module=SettingsAdmin">Настройки</a></li>{/if}
{if in_array('currency', $manager->permissions)}<li><a href="index.php?module=CurrencyAdmin">Валюты</a></li>{/if}
<li class="active"><a href="index.php?module=DeliveriesAdmin">Доставка</a></li>
{if in_array('payment', $manager->permissions)}<li><a href="index.php?module=PaymentMethodsAdmin">Оплата</a></li>{/if}
{if in_array('managers', $manager->permissions)}<li><a href="index.php?module=ManagersAdmin">Менеджеры</a></li>{/if}
{if in_array('maillist', $manager->permissions)}<li><a href="index.php?module=MailingMethodsAdmin">Рассылка</a></li>{/if}
{/capture}
{* Title *}
{$meta_title='Доставка' scope=parent}
{* Заголовок *}
<div id="header">
<h1>Доставка</h1>
<a class="add" href="{url module=DeliveryAdmin}">Добавить способ доставки</a>
</div>
<div id="main_list">
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $deliveries as $delivery}
<div class="{if !$delivery->enabled}invisible{/if} row">
<input type="hidden" name="positions[{$delivery->id}]" value="{$delivery->position}">
<div class="move cell"><div class="move_zone"></div></div>
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$delivery->id}" />
</div>
<div class="name cell">
<a href="{url module=DeliveryAdmin id=$delivery->id return=$smarty.server.REQUEST_URI}">{$delivery->name|escape}</a>
</div>
<div class="icons cell">
<a class="enable" title="Активен" href="#"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class='dash_link'>Выбрать все</label>
<span id="select">
<select name="action">
<option value="enable">Включить</option>
<option value="disable">Выключить</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
</div>
{literal}
<script>
$(function() {
// Сортировка списка
$("#list").sortable({
items: ".row",
tolerance: "pointer",
handle: ".move_zone",
scrollSensitivity: 40,
opacity: 0.7,
forcePlaceholderSize: true,
axis: 'y',
helper: function(event, ui){
if($('input[type="checkbox"][name*="check"]:checked').size()<1) return ui;
var helper = $('<div/>');
$('input[type="checkbox"][name*="check"]:checked').each(function(){
var item = $(this).closest('.row');
helper.height(helper.height()+item.innerHeight());
if(item[0]!=ui[0]) {
helper.append(item.clone());
$(this).closest('.row').remove();
}
else {
helper.append(ui.clone());
item.find('input[type="checkbox"][name*="check"]').attr('checked', false);
}
});
return helper;
},
start: function(event, ui) {
if(ui.helper.children('.row').size()>0)
$('.ui-sortable-placeholder').height(ui.helper.height());
},
beforeStop:function(event, ui){
if(ui.helper.children('.row').size()>0){
ui.helper.children('.row').each(function(){
$(this).insertBefore(ui.item);
});
ui.item.remove();
}
},
update:function(event, ui)
{
$("#list_form input[name*='check']").attr('checked', false);
$("#list_form").ajaxSubmit(function() {
colorize();
});
}
});
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Скрыт/Видим
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'delivery', 'id': id, 'values': {'enabled': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
$("form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,115 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('settings', $manager->permissions)}<li><a href="index.php?module=SettingsAdmin">Настройки</a></li>{/if}
{if in_array('currency', $manager->permissions)}<li><a href="index.php?module=CurrencyAdmin">Валюты</a></li>{/if}
<li class="active"><a href="index.php?module=DeliveriesAdmin">Доставка</a></li>
{if in_array('payment', $manager->permissions)}<li><a href="index.php?module=PaymentMethodsAdmin">Оплата</a></li>{/if}
{if in_array('managers', $manager->permissions)}<li><a href="index.php?module=ManagersAdmin">Менеджеры</a></li>{/if}
{/capture}
{if $delivery->id}
{$meta_title = $delivery->name scope=parent}
{else}
{$meta_title = 'Новый способ доставки' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<script src="design/js/jquery/jquery.js"></script>
<script src="design/js/jquery/jquery-ui.min.js"></script>
<script>
$(function() {
$('select[name=module]').change(function(){
$('div#module_settings').hide();
$('div#module_settings[module='+$(this).val()+']').show();
});
});
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success == 'added'}Способ доставки добавлен{elseif $message_success == 'updated'}Способ доставки изменен{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{$message_error}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$delivery->name|escape}"/>
<input name=id type="hidden" value="{$delivery->id}"/>
<div class="checkbox">
<input name=enabled value='1' type="checkbox" id="active_checkbox" {if $delivery->enabled}checked{/if}/> <label for="active_checkbox">Активен</label>
</div>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block layer">
<h2>Стоимость доставки</h2>
<ul>
<li><label class=property>Стоимость</label><input name="price" class="simpla_small_inp" type="text" value="{$delivery->price}" /> {$currency->sign}</li>
<li><label class=property>Бесплатна от</label><input name="free_from" class="simpla_small_inp" type="text" value="{$delivery->free_from}" /> {$currency->sign}</li>
<li><label class=property for="separate_payment">Оплачивается отдельно</label><input id="separate_payment" name="separate_payment" type="checkbox" value="1" {if $delivery->separate_payment}checked{/if} /></li>
<li><label class=property for="ems">EMS форма</label><input id="ems" name="ems" type="checkbox" value="1" {if $delivery->ems}checked{/if} /></li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Левая колонка свойств товара -->
<div id="column_right">
<div class="block layer">
<h2>Возможные способы оплаты</h2>
<ul>
{foreach $payment_methods as $payment_method}
<li>
<input type=checkbox name="delivery_payments[]" id="payment_{$payment_method->id}" value='{$payment_method->id}' {if in_array($payment_method->id, $delivery_payments)}checked{/if}> <label for="payment_{$payment_method->id}">{$payment_method->name}</label><br>
</li>
{/foreach}
</ul>
</div>
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Описагние товара -->
<div class="block layer">
<h2>Описание</h2>
<textarea name="description" class="editor_small">{$delivery->description|escape}</textarea>
</div>
<!-- Описание товара (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,28 @@
{$subject="Заявка на обратный звонок от `$callback->name|escape`" scope=parent}
<h1 style='font-weight:normal;font-family:arial;'>Заявка на обратный звонок от {$callback->name|escape}</h1>
<table cellpadding=6 cellspacing=0 style='border-collapse: collapse;'>
<tr>
<td style='padding:6px; width:170; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;'>
Имя
</td>
<td style='padding:6px; width:330; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;'>
{$callback->name|escape}
</td>
</tr>
<tr>
<td style='padding:6px; width:170; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;'>
Телефон
</td>
<td style='padding:6px; width:330; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;'>
{$callback->phone|escape}
</td>
</tr>
<tr>
<td style='padding:6px; width:170; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;'>
Сообщение:
</td>
<td style='padding:6px; width:330; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;'>
{$callback->message|escape|nl2br}</a>
</td>
</tr>
</table>

View File

@@ -0,0 +1,51 @@
{if $comment->approved}
{$subject="Новый комментарий от `$comment->name|escape`" scope=parent}
{else}
{$subject="Комментарий от `$comment->name|escape` ожидает одобрения" scope=parent}
{/if}
{if $comment->approved}
<h1 style="font-weight:normal;font-family:arial;"><a href="{$config->root_url}/simpla/index.php?module=CommentsAdmin">Новый комментарий</a> от {$comment->name|escape}</h1>
{else}
<h1 style="font-weight:normal;font-family:arial;"><a href="{$config->root_url}/simpla/index.php?module=CommentsAdmin">Комментарий</a> от {$comment->name|escape} ожидает одобрения</h1>
{/if}
<table cellpadding="6" cellspacing="0" style="border-collapse: collapse;">
<tr>
<td style="padding:6px; width:170; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Имя
</td>
<td style="padding:6px; width:330; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$comment->name|escape}
</td>
</tr>
<tr>
<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Комментарий
</td>
<td style="padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$comment->text|escape|nl2br}
</td>
</tr>
<tr>
<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Время
</td>
<td style="padding:6px; width:170; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$comment->date|date} {$comment->date|time}
</td>
</tr>
<tr>
<td style="padding:6px; width:170; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Статус
</td>
<td style="padding:6px; width:330; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{if $comment->approved}
Одобрен
{else}
Ожидает одобрения
{/if}
</td>
</tr>
</table>
<br><br>
Приятной работы с <a href='http://simp.la'>Simpla</a>!

View File

@@ -0,0 +1,38 @@
{$subject="Вопрос от пользователя `$feedback->name|escape`" scope=parent}
<h1 style='font-weight:normal;font-family:arial;'>Вопрос от пользователя {$feedback->name|escape}</h1>
<table cellpadding=6 cellspacing=0 style='border-collapse: collapse;'>
<tr>
<td style='padding:6px; width:170; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;'>
Имя
</td>
<td style='padding:6px; width:330; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;'>
{$feedback->name|escape}
</td>
</tr>
<tr>
<td style='padding:6px; width:170; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;'>
Email
</td>
<td style='padding:6px; width:330; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;'>
<a href='mailto:{$feedback->email|escape}?subject={$settings->site_name}'>{$feedback->email|escape}</a>
</td>
</tr>
<tr>
<td style='padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;'>
IP
</td>
<td style='padding:6px; width:170; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;'>
{$feedback->ip|escape} (<a href='http://www.ip-adress.com/ip_tracer/{$feedback->ip}/'>где это?</a>)
</td>
</tr>
<tr>
<td style='padding:6px; width:170; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;'>
Сообщение:
</td>
<td style='padding:6px; width:330; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;'>
{$feedback->message|escape|nl2br}</a>
</td>
</tr>
</table>
<br><br>
Приятной работы с <a href='http://simp.la'>Simpla</a>!

View File

@@ -0,0 +1,177 @@
{if $order->paid}
{$subject = "Заказ №`$order->id` оплачен" scope=parent}
{else}
{$subject = "Новый заказ №`$order->id`" scope=parent}
{/if}
<h1 style="font-weight:normal;font-family:arial;">
<a href="{$config->root_url}/simpla/index.php?module=OrderAdmin&id={$order->id}">Заказ №{$order->id}</a>
на сумму {$order->total_price|convert:$main_currency->id}&nbsp;{$main_currency->sign}
{if $order->paid == 1}оплачен{else}еще не оплачен{/if},
{if $order->status == 0}ждет обработки{elseif $order->status == 1}в обработке{elseif $order->status == 2}выполнен{/if}
</h1>
<table cellpadding="6" cellspacing="0" style="border-collapse: collapse;">
<tr>
<td style="padding:6px; width:170; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Статус
</td>
<td style="padding:6px; width:330; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{if $order->status == 0}
ждет обработки
{elseif $order->status == 1}
в обработке
{elseif $order->status == 2}
выполнен
{/if}
</td>
</tr>
<tr>
<td style="padding:6px; width:170; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Оплата
</td>
<td style="padding:6px; width:330; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{if $order->paid == 1}
<font color="green">оплачен</font>
{else}
не оплачен
{/if}
</td>
</tr>
{if $order->name}
<tr>
<td style="padding:6px; width:170; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Имя, фамилия
</td>
<td style="padding:6px; width:330; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$order->name|escape} {$order->name2|escape}
{if $user}(<a href="{$config->root_url}/simpla/index.php?module=UserAdmin&id={$user->id}">зарегистрированный пользователь</a>){/if}
</td>
</tr>
{/if}
{if $order->email}
<tr>
<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Email
</td>
<td style="padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$order->email|escape}
</td>
</tr>
{/if}
{if $order->phone}
<tr>
<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Телефон
</td>
<td style="padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$order->phone|escape}
</td>
</tr>
{/if}
{if $order->address}
<tr>
<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Страна, Регион, Город, адрес доставки
</td>
<td style="padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$order->country|escape}, {$order->region|escape}, {$order->city|escape}, {$order->address|escape}, {$order->index|escape}
</td>
</tr>
{/if}
{if $order->comment}
<tr>
<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Комментарий
</td>
<td style="padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$order->comment|escape|nl2br}
</td>
</tr>
{/if}
<tr>
<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Дата
</td>
<td style="padding:6px; width:170; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$order->date|date} {$order->date|time}
</td>
</tr>
</table>
<h1 style="font-weight:normal;font-family:arial;">Покупатель заказал:</h1>
<table cellpadding="6" cellspacing="0" style="border-collapse: collapse;">
{foreach name=purchases from=$purchases item=purchase}
<tr>
<td align="center" style="padding:6px; width:100; padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$image = $purchase->product->images[0]}
<a href="{$config->root_url}/products/{$purchase->product->url}"><img border="0" src="{$image->filename|resize:50:50}"></a>
</td>
<td style="padding:6px; width:250; padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
<a href="{$config->root_url}/products/{$purchase->product->url}">{$purchase->product_name}</a>
{$purchase->variant_name}
<div class="features">
{foreach from=$purchase->options item=opt key=ok}
{assign var=f value=$features[$ok]}
<p>
<label>{$f->name} </label>
<span>
{$opt}
</span>
</p>
{/foreach}
</div>
</td>
<td align=right style="padding:6px; text-align:right; width:150; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$purchase->amount} {$settings->units} &times; {$purchase->price|convert:$main_currency->id}&nbsp;{$main_currency->sign}
</td>
</tr>
{/foreach}
{if $order->discount}
<tr>
<td style="padding:6px; width:100; padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;"></td>
<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Скидка
</td>
<td align=right style="padding:6px; text-align:right; width:170; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$order->discount}&nbsp;%
</td>
</tr>
{/if}
{if $order->coupon_discount>0}
<tr>
<td style="padding:6px; width:100; padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;"></td>
<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
Купон {$order->coupon_code}
</td>
<td align=right style="padding:6px; text-align:right; width:170; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
&minus;{$order->coupon_discount}&nbsp;{$currency->sign}
</td>
</tr>
{/if}
{if $delivery && !$order->separate_delivery}
<tr>
<td style="padding:6px; width:100; padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;"></td>
<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
{$delivery->name}
</td>
<td align="right" style="padding:6px; text-align:right; width:170; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
{$order->delivery_price|convert:$main_currency->id}&nbsp;{$main_currency->sign}
</td>
</tr>
{/if}
<tr>
<td style="padding:6px; width:100; padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;"></td>
<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;font-weight:bold;">
Итого
</td>
<td align="right" style="padding:6px; text-align:right; width:170; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;font-weight:bold;">
{$order->total_price|convert:$main_currency->id}&nbsp;{$main_currency->sign}
</td>
</tr>
</table>

View File

@@ -0,0 +1,93 @@
{capture name=tabs}
{if in_array('import', $manager->permissions)}<li><a href="index.php?module=ImportAdmin">Импорт</a></li>{/if}
<li class="active"><a href="index.php?module=ExportAdmin">Экспорт</a></li>
{if in_array('backup', $manager->permissions)}<li><a href="index.php?module=BackupAdmin">Бекап</a></li>{/if}
{/capture}
{$meta_title='Экспорт товаров' scope=parent}
<script src="{$config->root_url}/simpla/design/js/piecon/piecon.js"></script>
<script>
{literal}
var in_process=false;
$(function() {
// On document load
$('input#start').click(function() {
Piecon.setOptions({fallback: 'force'});
Piecon.setProgress(0);
$("#progressbar").progressbar({ value: 0 });
$("#start").hide('fast');
do_export();
});
function do_export(page)
{
page = typeof(page) != 'undefined' ? page : 1;
$.ajax({
url: "ajax/export.php",
data: {page:page},
dataType: 'json',
success: function(data){
if(data && !data.end)
{
Piecon.setProgress(Math.round(100*data.page/data.totalpages));
$("#progressbar").progressbar({ value: 100*data.page/data.totalpages });
do_export(data.page*1+1);
}
else
{
if(data && data.end)
{
Piecon.setProgress(100);
$("#progressbar").hide('fast');
window.location.href = 'files/export/export.csv';
}
}
},
error:function(xhr, status, errorThrown) {
alert(errorThrown+'\n'+xhr.responseText);
}
});
}
});
{/literal}
</script>
<style>
.ui-progressbar-value { background-image: url(design/images/progress.gif); background-position:left; border-color: #009ae2;}
#progressbar{ clear: both; height:29px; }
#result{ clear: both; width:100%;}
#download{ display:none; clear: both; }
</style>
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>
{if $message_error == 'no_permission'}Установите права на запись в папку {$export_files_dir}
{else}{$message_error}{/if}
</span>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<div>
<h1>Экспорт товаров</h1>
{if $message_error != 'no_permission'}
<div id='progressbar'></div>
<input class="button_green" id="start" type="button" name="" value="Экспортировать" />
{/if}
</div>

View File

@@ -0,0 +1,91 @@
{capture name=tabs}
{/capture}
{$meta_title='Экспорт покупателей' scope=parent}
<script src="{$config->root_url}/simpla/design/js/piecon/piecon.js"></script>
<script>
var in_process=false;
var group_id='{$group_id|escape}';
var keyword='{$keyword|escape}';
var sort='{$sort|escape}';
{literal}
var in_process=false;
$(function() {
// On document load
$('input#start').click(function() {
Piecon.setOptions({fallback: 'force'});
Piecon.setProgress(0);
$("#progressbar").progressbar({ value: 0 });
$("#start").hide('fast');
do_export();
});
function do_export(page)
{
page = typeof(page) != 'undefined' ? page : 1;
$.ajax({
url: "ajax/export_users.php",
data: {page:page, group_id:group_id, keyword:keyword, sort:sort},
dataType: 'json',
success: function(data){
if(data && !data.end)
{
Piecon.setProgress(Math.round(100*data.page/data.totalpages));
$("#progressbar").progressbar({ value: 100*data.page/data.totalpages });
do_export(data.page*1+1);
}
else
{
Piecon.setProgress(100);
$("#progressbar").hide('fast');
window.location.href = 'files/export_users/users.csv';
}
},
error:function(xhr, status, errorThrown) {
alert(errorThrown+'\n'+xhr.responseText);
}
});
}
});
{/literal}
</script>
<style>
.ui-progressbar-value { background-image: url(design/images/progress.gif); background-position:left; border-color: #009ae2;}
#progressbar{ clear: both; height:29px; }
#result{ clear: both; width:100%;}
#download{ display:none; clear: both; }
</style>
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>
{if $message_error == 'no_permission'}Установите права на запись в папку {$export_files_dir}
{else}{$message_error}{/if}
</span>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<div>
<h1>Экспорт покупателей</h1>
{if $message_error != 'no_permission'}
<div id='progressbar'></div>
<input class="button_green" id="start" type="button" name="" value="Экспортировать" />
{/if}
</div>

View File

@@ -0,0 +1,93 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('products', $manager->permissions)}<li><a href="index.php?module=ProductsAdmin">Товары</a></li>{/if}
{if in_array('categories', $manager->permissions)}<li><a href="index.php?module=CategoriesAdmin">Категории</a></li>{/if}
{if in_array('brands', $manager->permissions)}<li><a href="index.php?module=BrandsAdmin">Бренды</a></li>{/if}
<li class="active"><a href="index.php?module=FeaturesAdmin">Свойства</a></li>
{/capture}
{if $feature->id}
{$meta_title = $feature->name scope=parent}
{else}
{$meta_title = 'Новое свойство' scope=parent}
{/if}
{* On document load *}
{literal}
<script>
$(function() {
});
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='added'}Свойство добавлено{elseif $message_success=='updated'}Свойство обновлено{else}{$message_success}{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{$message_error}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product>
<div id="name">
<input class="name" name=name type="text" value="{$feature->name|escape}"/>
<input name=id type="hidden" value="{$feature->id|escape}"/>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Категории -->
<div class="block">
<h2>Использовать в категориях</h2>
<select class=multiple_categories multiple name="feature_categories[]">
{function name=category_select selected_id=$product_category level=0}
{foreach from=$categories item=category}
<option value='{$category->id}' {if in_array($category->id, $feature_categories)}selected{/if} category_name='{$category->single_name}'>{section name=sp loop=$level}&nbsp;&nbsp;&nbsp;&nbsp;{/section}{$category->name}</option>
{category_select categories=$category->subcategories selected_id=$selected_id level=$level+1}
{/foreach}
{/function}
{category_select categories=$categories}
</select>
</div>
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<!-- Параметры страницы -->
<div class="block">
<h2>Настройки свойства</h2>
<ul>
<li><input type=checkbox name=in_filter id=in_filter {if $feature->in_filter}checked{/if} value="1"> <label for=in_filter>Использовать в фильтре</label></li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
<input type=hidden name='session_id' value='{$smarty.session.id}'>
<input class="button_green" type="submit" name="" value="Сохранить" />
</div>
<!-- Правая колонка свойств товара (The End)-->
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,135 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('products', $manager->permissions)}<li><a href="index.php?module=ProductsAdmin">Товары</a></li>{/if}
{if in_array('categories', $manager->permissions)}<li><a href="index.php?module=CategoriesAdmin">Категории</a></li>{/if}
{if in_array('brands', $manager->permissions)}<li><a href="index.php?module=BrandsAdmin">Бренды</a></li>{/if}
<li class="active"><a href="index.php?module=FeaturesAdmin">Свойства</a></li>
{/capture}
{if $feature->id}
{$meta_title = $feature->name scope=parent}
{else}
{$meta_title = 'Новое свойство' scope=parent}
{/if}
{* On document load *}
{literal}
<script>
$(function() {
/* Удаление картинки*/
$(".images a.delete").click( function() {
$("input[name='delete_image']").val('1');
$(this).closest("ul").fadeOut(200, function() { $(this).remove(); });
return false;
});
});
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='added'}Свойство добавлено{elseif $message_success=='updated'}Свойство обновлено{else}{$message_success}{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{$message_error}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<div id="name">
<input class="name" name=name type="text" value="{$feature->name|escape}"/>
<input name=id type="hidden" value="{$feature->id|escape}"/>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Категории -->
<div class="block">
<h2>Использовать в категориях</h2>
<select class=multiple_categories multiple name="feature_categories[]">
{function name=category_select selected_id=$product_category level=0}
{foreach from=$categories item=category}
<option value='{$category->id}' {if in_array($category->id, $feature_categories)}selected{/if} category_name='{$category->single_name}'>{section name=sp loop=$level}&nbsp;&nbsp;&nbsp;&nbsp;{/section}{$category->name}</option>
{category_select categories=$category->subcategories selected_id=$selected_id level=$level+1}
{/foreach}
{/function}
{category_select categories=$categories}
</select>
</div>
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<!-- Параметры страницы -->
<div class="block">
<h2>Настройки свойства</h2>
<ul>
<!-- Добавлены свойства -->
<li><input type=checkbox name=req id=req {if $feature->req}checked{/if} value="1"> <label for=req>Обязательно к заполнению</label></li>
<li><input type=checkbox name=on_prod id=on_prod {if $feature->on_prod}checked{/if} value="1"> <label for=on_prod>Отображать на странице продукта</label></li>
<li><input type=checkbox name=on_main id=on_main {if $feature->on_main}checked{/if} value="1"> <label for=on_main>Отображать на главной странице</label></li>
<li><input type=checkbox name=multiselect id=multiselect {if $feature->multiselect}checked{/if} value="1"> <label for=multiselect>Множественный выбор</label></li>
<li><input type=checkbox name=in_filter id=in_filter {if $feature->in_filter}checked{/if} value="1"> <label for=in_filter>Использовать в фильтре</label></li>
<li><input type=checkbox name=in_variant id=in_variant {if $feature->in_variant}checked{/if} value="1"> <label for=in_variant>Использовать в вариантах</label></li>
<li><input type=checkbox name=in_compare id=in_compare {if $feature->in_compare}checked{/if} value="1"> <label for=in_compare>Использовать в сравнении</label></li>
<li><input type=checkbox name=isrange id=isrange {if $feature->isrange}checked{/if} value="1" /> <label for=isrange>Выбор диапазона (от... до...)</label>
<ul>
<li><input type=checkbox name=slider id=slider {if $feature->slider}checked{/if} value="1" /> <label for=slider>Ползунок</label></li>
<li><label class=property for=unit>Единицы измерения</label><input name="unit" class="small_simpla_inp" type="text" id="unit" value="{$feature->unit|escape}" /></li>
</ul>
</li>
<li><input type=checkbox name=istext id=istext {if $feature->istext}checked{/if} value="1" /> <label for=istext>Значение клиента</label>
<li><label for=nameselect>Текст при выборе</label><input name="nameselect" class="small_simpla_inp" type="text" id="nameselect" value="{$feature->nameselect|escape}" /></li>
</ul>
</div>
<!-- Изображение категории -->
<div class="block layer images">
<h2>Изображение свойства</h2>
<input class='upload_image' name=image type=file>
<input type=hidden name="delete_image" value="">
{if $feature->image}
<ul>
<li>
<a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a>
<img src="../{$config->features_images_dir}{$feature->image}" alt="" />
</li>
</ul>
{/if}
</div>
<!-- Параметры страницы (The End)-->
<input type=hidden name='session_id' value='{$smarty.session.id}'>
<input class="button_green" type="submit" name="" value="Сохранить" />
</div>
<!-- Правая колонка свойств товара (The End)-->
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,195 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('products', $manager->permissions)}<li><a href="index.php?module=ProductsAdmin">Товары</a></li>{/if}
{if in_array('categories', $manager->permissions)}<li><a href="index.php?module=CategoriesAdmin">Категории</a></li>{/if}
{if in_array('brands', $manager->permissions)}<li><a href="index.php?module=BrandsAdmin">Бренды</a></li>{/if}
<li class="active"><a href="index.php?module=FeaturesAdmin">Свойства</a></li>
{/capture}
{* Title *}
{$meta_title='Свойства' scope=parent}
{* Заголовок *}
<div id="header">
<h1>Свойства</h1>
<a class="add" href="{url module=FeatureAdmin return=$smarty.server.REQUEST_URI}">Добавить свойство</a>
</div>
{if $features}
<div id="main_list" class="features">
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $features as $feature}
<div class="{if $feature->in_filter}in_filter{/if} row">
<input type="hidden" name="positions[{$feature->id}]" value="{$feature->position}">
<div class="move cell"><div class="move_zone"></div></div>
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$feature->id}" />
</div>
<div class="cell">
<a href="{url module=FeatureAdmin id=$feature->id return=$smarty.server.REQUEST_URI}">{$feature->name|escape}</a>
</div>
<div class="icons cell">
<a title="Использовать в фильтре" class="in_filter" href='#' ></a>
<a title="Удалить" class="delete" href='#' ></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="set_in_filter">Использовать в фильтре</option>
<option value="unset_in_filter">Не использовать в фильтре</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
</div>
{else}
Нет свойств
{/if}
<!-- Меню -->
<div id="right_menu">
<!-- Категории товаров -->
{function name=categories_tree}
{if $categories}
<ul>
{if $categories[0]->parent_id == 0}
<li {if !$category->id}class="selected"{/if}><a href="{url category_id=null brand_id=null}">Все категории</a></li>
{/if}
{foreach item=c from=$categories}
<li {if $category->id == $c->id}class="selected"{/if}><a href="index.php?module=FeaturesAdmin&category_id={$c->id}">{$c->name}</a></li>
{categories_tree categories=$c->subcategories}
{/foreach}
</ul>
{/if}
{/function}
{categories_tree categories=$categories}
<!-- Категории товаров (The End)-->
</div>
<!-- Левое меню (The End) -->
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Сортировка списка
$("#list").sortable({
items: ".row",
tolerance: "pointer",
handle: ".move_zone",
axis: 'y',
scrollSensitivity: 40,
opacity: 0.7,
forcePlaceholderSize: true,
helper: function(event, ui){
if($('input[type="checkbox"][name*="check"]:checked').size()<1) return ui;
var helper = $('<div/>');
$('input[type="checkbox"][name*="check"]:checked').each(function(){
var item = $(this).closest('.row');
helper.height(helper.height()+item.innerHeight());
if(item[0]!=ui[0]) {
helper.append(item.clone());
$(this).closest('.row').remove();
}
else {
helper.append(ui.clone());
item.find('input[type="checkbox"][name*="check"]').attr('checked', false);
}
});
return helper;
},
start: function(event, ui) {
if(ui.helper.children('.row').size()>0)
$('.ui-sortable-placeholder').height(ui.helper.height());
},
beforeStop:function(event, ui){
if(ui.helper.children('.row').size()>0){
ui.helper.children('.row').each(function(){
$(this).insertBefore(ui.item);
});
ui.item.remove();
}
},
update:function(event, ui)
{
$("#list_form input[name*='check']").attr('checked', false);
$("#list_form").ajaxSubmit(function() {
colorize();
});
}
});
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Указать "в фильтре"/"не в фильтре"
$("a.in_filter").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('in_filter')?0:1;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'feature', 'id': id, 'values': {'in_filter': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(!state)
line.removeClass('in_filter');
else
line.addClass('in_filter');
},
dataType: 'json'
});
return false;
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest("div.row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтверждение удаления
$("form").submit(function() {
if($('#list input[type="checkbox"][name*="check"]:checked').length>0)
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,158 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('comments', $manager->permissions)}<li><a href="index.php?module=CommentsAdmin">Комментарии</a></li>{/if}
<li class="active"><a href="index.php?module=FeedbacksAdmin">Обратная связь</a></li>
{if in_array('callbacks', $manager->permissions)}<li><a href="index.php?module=CallbacksAdmin">Заказ обратного звонка</a></li>{/if}
{/capture}
{* Title *}
{$meta_title='Обратная связь' scope=parent}
{* Поиск *}
{if $feedbacks || $keyword}
<form method="get">
<div id="search">
<input type="hidden" name="module" value='FeedbacksAdmin'>
<input class="search" type="text" name="keyword" value="{$keyword|escape}" />
<input class="search_button" type="submit" value=""/>
</div>
</form>
{/if}
{* Заголовок *}
<div id="header">
{if $feedbacks_count}
<h1>{$feedbacks_count} {$feedbacks_count|plural:'сообщение':'сообщений':'сообщения'}</h1>
{else}
<h1>Нет сообщений</h1>
{/if}
</div>
<div id="main_list">
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
{if $feedbacks}
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list" style="width:100%;">
{foreach $feedbacks as $feedback}
<div class="row">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$feedback->id}" />
</div>
<div class="name cell">
<div class='comment_name'>
<a href="mailto:{$feedback->name|escape}<{$feedback->email|escape}>?subject=Вопрос от пользователя {$feedback->name|escape}">{$feedback->name|escape}</a>
</div>
<div class='comment_text'>
{$feedback->message|escape|nl2br}
</div>
<div class='comment_info'>
Сообщение отправлено {$feedback->date|date} в {$feedback->date|time}
</div>
</div>
<div class="icons cell">
<a href='#' title='Удалить' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id='check_all' class='dash_link'>Выбрать все</label>
<span id=select>
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id='apply_action' class="button_green" type=submit value="Применить">
</div>
</form>
{else}
Нет сообщений
{/if}
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
</div>
<!-- Меню -->
<div id="right_menu">
</div>
<!-- Меню (The End) -->
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Скрыт/Видим
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'blog', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
// Подтверждение удаления
$("form#list_form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,93 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('users', $manager->permissions)}<li><a href="index.php?module=UsersAdmin">Покупатели</a></li>{/if}
<li class="active"><a href="index.php?module=GroupsAdmin">Группы</a></li>
{if in_array('coupons', $manager->permissions)}<li><a href="index.php?module=CouponsAdmin">Купоны</a></li>{/if}
{/capture}
{if $group->id}
{$meta_title = $group->name scope=parent}
{else}
{$meta_title = 'Новая группа' scope=parent}
{/if}
{* On document load *}
{literal}
<script src="design/js/jquery/jquery.js"></script>
<script src="design/js/jquery/jquery-ui.min.js"></script>
<script type="text/javascript" src="design/js/autocomplete/jquery.autocomplete-min.js"></script>
<style>
.autocomplete-w1 { background:url(img/shadow.png) no-repeat bottom right; position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; }
.autocomplete { border:1px solid #999; background:#FFF; cursor:default; text-align:left; overflow-x:auto; min-width: 300px; overflow-y: auto; margin:-6px 6px 6px -6px; /* IE6 specific: */ _height:350px; _margin:0; _overflow-x:hidden; }
.autocomplete .selected { background:#F0F0F0; }
.autocomplete div { padding:2px 5px; white-space:nowrap; }
.autocomplete strong { font-weight:normal; color:#3399FF; }
</style>
<script>
$(function() {
});
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='added'}Группа добавлена{elseif $message_success=='updated'}Группа изменена{else}{$message_success|escape}{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{$message_error}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$group->name|escape}"/>
<input name=id type="hidden" value="{$group->id|escape}"/>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block">
<ul>
<li><label class=property>Скидка</label><input name="discount" class="simpla_inp" type="text" value="{$group->discount|escape}" />%</li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
</div>
<!-- Левая колонка свойств товара (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,98 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('users', $manager->permissions)}<li><a href="index.php?module=UsersAdmin">Покупатели</a></li>{/if}
<li class="active"><a href="index.php?module=GroupsAdmin">Группы</a></li>
{if in_array('coupons', $manager->permissions)}<li><a href="index.php?module=CouponsAdmin">Купоны</a></li>{/if}
{/capture}
{* Title *}
{$meta_title='Группы пользователей' scope=parent}
{* Заголовок *}
<div id="header">
<h1>Группы пользователей</h1>
<a class="add" href="index.php?module=GroupAdmin">Добавить группу</a>
</div>
<!-- Основная часть -->
<div id="main_list">
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list" class="groups">
{foreach $groups as $group}
<div class="row">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$group->id}"/>
</div>
<div class="group_name cell">
<a href="index.php?module=GroupAdmin&id={$group->id}">{$group->name}</a>
</div>
<div class="group_discount cell">
{$group->discount} %
</div>
<div class="icons cell">
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id=select>
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
</div>
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', 1-$('#list input[type="checkbox"][name*="check"]').attr('checked'));
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтверждение удаления
$("form").submit(function() {
if($('#list input[type="checkbox"][name*="check"]:checked').length>0)
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,89 @@
{capture name=tabs}
<li><a href="index.php?module=ThemeAdmin">Тема</a></li>
<li><a href="index.php?module=TemplatesAdmin">Шаблоны</a></li>
<li><a href="index.php?module=StylesAdmin">Стили</a></li>
<li class="active"><a href="index.php?module=ImagesAdmin">Изображения</a></li>
{/capture}
{$meta_title = "Изображения" scope=parent}
{* On document load *}
{literal}
<script>
$(function() {
// Редактировать
$("a.edit").click(function() {
name = $(this).closest('li').attr('name');
inp1 = $('<input type=hidden name="old_name[]">').val(name);
inp2 = $('<input type=text name="new_name[]">').val(name);
$(this).closest('li').find("p.name").html('').append(inp1).append(inp2);
inp2.focus().select();
return false;
});
// Удалить
$("a.delete").click(function() {
name = $(this).closest('li').attr('name');
$('input[name=delete_image]').val(name);
$(this).closest("form").submit();
});
// Загрузить
$("#upload_image").click(function() {
$(this).closest('div').append($('<input type=file name=upload_images[]>'));
});
$("form").submit(function() {
if($('input[name="delete_image"]').val()!='' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}
<h1>Изображения темы {$theme}</h1>
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error == 'permissions'}Установите права на запись для папки {$images_dir}
{elseif $message_error == 'name_exists'}Файл с таким именем уже существует
{elseif $message_error == 'theme_locked'}Текущая тема защищена от изменений. Создайте копию темы.
{else}{$message_error}{/if}</span>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<input type="hidden" name="delete_image" value="">
<!-- Список файлов для выбора -->
<div class="block layer">
<ul class="theme_images">
{foreach item=image from=$images}
<li name='{$image->name|escape}'>
<a href='#' class='delete' title="Удалить"><img src='design/images/delete.png'></a>
<a href='#' class='edit' title="Переименовать"><img src='design/images/pencil.png'></a>
<p class="name">{$image->name|escape|truncate:16:'...'}</p>
<div class="theme_image">
<a class='preview' href='../{$images_dir}{$image->name|escape}'><img src='../{$images_dir}{$image->name|escape}'></a>
</div>
<p class=size>{if $image->size>1024*1024}{($image->size/1024/1024)|round:2} МБ{elseif $image->size>1024}{($image->size/1024)|round:2} КБ{else}{$image->size} Байт{/if}, {$image->width}&times;{$image->height} px</p>
</li>
{/foreach}
</ul>
</div>
<div class="block upload_image">
<span id="upload_image"><i class="dash_link">Добавить изображение</i></span>
</div>
<div class="block">
<input class="button_green button_save" type="submit" name="save" value="Сохранить" />
</div>
</form>

View File

@@ -0,0 +1,148 @@
{capture name=tabs}
<li class="active"><a href="index.php?module=ImportAdmin">Импорт</a></li>
{if in_array('export', $manager->permissions)}<li><a href="index.php?module=ExportAdmin">Экспорт</a></li>{/if}
{if in_array('backup', $manager->permissions)}<li><a href="index.php?module=BackupAdmin">Бекап</a></li>{/if}
{/capture}
{$meta_title='Импорт товаров' scope=parent}
<script src="{$config->root_url}/simpla/design/js/piecon/piecon.js"></script>
<script>
{if $filename}
{literal}
var in_process=false;
var count=1;
// On document load
$(function(){
Piecon.setOptions({fallback: 'force'});
Piecon.setProgress(0);
$("#progressbar").progressbar({ value: 1 });
in_process=true;
do_import();
});
function do_import(from)
{
from = typeof(from) != 'undefined' ? from : 0;
$.ajax({
url: "ajax/import.php",
data: {from:from},
dataType: 'json',
success: function(data){
for(var key in data.items)
{
$('ul#import_result').prepend('<li><span class=count>'+count+'</span> <span title='+data.items[key].status+' class="status '+data.items[key].status+'"></span> <a target=_blank href="index.php?module=ProductAdmin&id='+data.items[key].product.id+'">'+data.items[key].product.name+'</a> '+data.items[key].variant.name+'</li>');
count++;
}
Piecon.setProgress(Math.round(100*data.from/data.totalsize));
$("#progressbar").progressbar({ value: 100*data.from/data.totalsize });
if(data != false && !data.end)
{
do_import(data.from);
}
else
{
Piecon.setProgress(100);
$("#progressbar").hide('fast');
in_process = false;
}
},
error: function(xhr, status, errorThrown) {
alert(errorThrown+'\n'+xhr.responseText);
}
});
}
{/literal}
{/if}
</script>
<style>
.ui-progressbar-value { background-color:#b4defc; background-image: url(design/images/progress.gif); background-position:left; border-color: #009ae2;}
#progressbar{ clear: both; height:29px;}
#result{ clear: both; width:100%;}
</style>
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>
{if $message_error == 'no_permission'}Установите права на запись в папку {$import_files_dir}
{elseif $message_error == 'convert_error'}Не получилось сконвертировать файл в кодировку UTF8
{elseif $message_error == 'locale_error'}На сервере не установлена локаль {$locale}, импорт может работать некорректно
{else}{$message_error}{/if}
</span>
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error != 'no_permission'}
{if $filename}
<div>
<h1>Импорт {$filename|escape}</h1>
</div>
<div id='progressbar'></div>
<ul id='import_result'></ul>
{else}
<h1>Импорт товаров</h1>
<div class="block">
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<input name="file" class="import_file" type="file" value="" />
<input class="button_green" type="submit" name="" value="Загрузить" />
<p>
(максимальный размер файла &mdash; {if $config->max_upload_filesize>1024*1024}{$config->max_upload_filesize/1024/1024|round:'2'} МБ{else}{$config->max_upload_filesize/1024|round:'2'} КБ{/if})
</p>
</form>
</div>
<div class="block block_help">
<p>
Создайте бекап на случай неудачного импорта.
</p>
<p>
Сохраните таблицу в формате CSV
</p>
<p>
В первой строке таблицы должны быть указаны названия колонок в таком формате:
<ul>
<li><label>Товар</label> название товара</li>
<li><label>Категория</label> категория товара</li>
<li><label>Бренд</label> бренд товара</li>
<li><label>Вариант</label> название варианта</li>
<li><label>Цена</label> цена товара</li>
<li><label>Старая цена</label> старая цена товара</li>
<li><label>Склад</label> количество товара на складе</li>
<li><label>Артикул</label> артикул товара</li>
<li><label>Видим</label> отображение товара на сайте (0 или 1)</li>
<li><label>Рекомендуемый</label> является ли товар рекомендуемым (0 или 1)</li>
<li><label>Аннотация</label> краткое описание товара</li>
<li><label>Адрес</label> адрес страницы товара</li>
<li><label>Описание</label> полное описание товара</li>
<li><label>Изображения</label> имена локальных файлов или url изображений в интернете, через запятую</li>
<li><label>Заголовок страницы</label> заголовок страницы товара (Meta title)</li>
<li><label>Ключевые слова</label> ключевые слова (Meta keywords)</li>
<li><label>Описание страницы</label> описание страницы товара (Meta description)</li>
</ul>
</p>
<p>
Любое другое название колонки трактуется как название свойства товара
</p>
<p>
<a href='files/import/example.csv'>Скачать пример файла</a>
</p>
</div>
{/if}
{/if}

View File

@@ -0,0 +1,265 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
<title>{$meta_title}</title>
<link rel="icon" href="design/images/favicon.ico" type="image/x-icon">
<link href="design/css/style.css" rel="stylesheet" type="text/css" />
<link href="design/css/utils.css" rel="stylesheet" type="text/css" />
<script src="design/js/jquery/jquery.js"></script>
<script src="design/js/jquery/jquery.form.js"></script>
<script src="design/js/jquery/jquery-ui.min.js"></script>
<link rel="stylesheet" type="text/css" href="design/js/jquery/jquery-ui.css" media="screen" />
<meta name="viewport" content="width=1024">
</head>
<body>
<a href='{$config->root_url}' class='admin_bookmark'></a>
<!-- Вся страница -->
<div id="main">
<!-- Главное меню -->
<ul id="main_menu" class="d-flex">
{if in_array('products', $manager->permissions)}
<li><a href="index.php?module=ProductsAdmin"><img src="design/images/menu/catalog.png"><b>Каталог</b></a></li>
{elseif in_array('categories', $manager->permissions)}
<li><a href="index.php?module=CategoriesAdmin"><img src="design/images/menu/catalog.png"><b>Каталог</b></a></li>
{elseif in_array('brands', $manager->permissions)}
<li><a href="index.php?module=BrandsAdmin"><img src="design/images/menu/catalog.png"><b>Каталог</b></a></li>
{elseif in_array('features', $manager->permissions)}
<li><a href="index.php?module=FeaturesAdmin"><img src="design/images/menu/catalog.png"><b>Каталог</b></a></li>
{/if}
{if in_array('orders', $manager->permissions)}
<li><a href="index.php?module=OrdersAdmin"><img src="design/images/menu/orders.png"><b>Заказы</b></a>
{if $new_orders_counter}<div class='counter'><span>{$new_orders_counter}</span></div>{/if}
{elseif in_array('labels', $manager->permissions)}
<li><a href="index.php?module=OrdersLabelsAdmin"><img src="design/images/menu/orders.png"><b>Заказы</b></a>
{/if}
</li>
{if in_array('users', $manager->permissions)}
<li><a href="index.php?module=UsersAdmin"><img src="design/images/menu/users.png"><b>Покупатели</b></a></li>
{elseif in_array('groups', $manager->permissions)}
<li><a href="index.php?module=GroupsAdmin"><img src="design/images/menu/users.png"><b>Покупатели</b></a></li>
{elseif in_array('coupons', $manager->permissions)}
<li><a href="index.php?module=CouponsAdmin"><img src="design/images/menu/users.png"><b>Покупатели</b></a></li>
{/if}
{if in_array('pages', $manager->permissions)}
<li><a href="index.php?module=ServicesAdmin"><img src="design/images/menu/wrench.png"><b>Услуги</b></a></li>
{/if}
{if in_array('pages', $manager->permissions)}
<li><a href="index.php?module=PagesAdmin"><img src="design/images/menu/pages.png"><b>Страницы</b></a></li>
{/if}
{if in_array('blog', $manager->permissions)}
<li><a href="index.php?module=BlogAdmin"><img src="design/images/menu/blog.png"><b>Блог</b></a></li>
{/if}
{if in_array('comments', $manager->permissions)}
<li><a href="index.php?module=CommentsAdmin"><img src="design/images/menu/comments.png"><b>Комментарии</b></a>
{if $new_comments_counter}<div class='counter'><span>{$new_comments_counter}</span></div>{/if}</li>
{elseif in_array('feedbacks', $manager->permissions)}
<li><a href="index.php?module=FeedbacksAdmin"><img src="design/images/menu/comments.png"><b>Комментарии</b></a>
{/if}
{if in_array('import', $manager->permissions)}
<li><a href="index.php?module=ImportAdmin"><img src="design/images/menu/wizards.png"><b>Автоматизация</b></a></li>
{elseif in_array('export', $manager->permissions)}
<li><a href="index.php?module=ExportAdmin"><img src="design/images/menu/wizards.png"><b>Автоматизация</b></a></li>
{elseif in_array('backup', $manager->permissions)}
<li><a href="index.php?module=BackupAdmin"><img src="design/images/menu/wizards.png"><b>Автоматизация</b></a></li>
{/if}
{if in_array('stats', $manager->permissions)}
<li><a href="index.php?module=StatsAdmin"><img src="design/images/menu/statistics.png"><b>Статистика</b></a></li>
{/if}
{if in_array('design', $manager->permissions)}
<li><a href="index.php?module=ThemeAdmin"><img src="design/images/menu/design.png"><b>Дизайн</b></a></li>
{/if}
{if in_array('settings', $manager->permissions)}
<li><a href="index.php?module=SettingsAdmin"><img src="design/images/menu/settings.png"><b>Настройки</b></a></li>
{elseif in_array('delivery', $manager->permissions)}
<li><a href="index.php?module=DeliveriesAdmin"><img src="design/images/menu/settings.png"><b>Настройки</b></a></li>
{elseif in_array('payment', $manager->permissions)}
<li><a href="index.php?module=PaymentMethodsAdmin"><img src="design/images/menu/settings.png"><b>Настройки</b></a></li>
{elseif in_array('managers', $manager->permissions)}
<li><a href="index.php?module=ManagersAdmin"><img src="design/images/menu/settings.png"><b>Настройки</b></a></li>
{/if}
{if in_array('banners', $manager->permissions)}
<li><a href="index.php?module=BannersAdmin"><img src="design/images/menu/banners.png"><b>Баннеры</b></a></li>
{/if}
</ul>
<!-- Главное меню (The End)-->
<!-- Таб меню -->
<ul id="tab_menu">
{$smarty.capture.tabs}
</ul>
<!-- Таб меню (The End)-->
<!-- Основная часть страницы -->
<div id="middle">
{$content}
</div>
<!-- Основная часть страницы (The End) -->
<!-- Подвал сайта -->
<div id="footer">
&copy; 2013 <a href='https://simplacms.ru'>Simpla {$config->version}</a>
{if in_array('license', $manager->permissions)}
{if $license->valid}
Лицензия действительна {if $license->expiration != '*'}до {$license->expiration}{/if} для домен{$license->domains|count|plural:'а':'ов'} {foreach $license->domains as $d}{$d}{if !$d@last}, {/if}{/foreach}.
<a href='index.php?module=LicenseAdmin'>Управление лицензией</a>.
{else}
Лицензия недействительна. <a href='index.php?module=LicenseAdmin'>Управление лицензией</a>.
{/if}
{/if}
Вы вошли как {$manager->login}.
<a href='{$config->root_url}?logout' id="logout">Выход</a>
</div>
<!-- Подвал сайта (The End)-->
</div>
<!-- Вся страница (The End)-->
</body>
</html>
{* Интеграция с ПростымиЗвонками *}
{if $settings->pz_server && $settings->pz_phones[$manager->login]}
<script src="design/js/prostiezvonki/prostiezvonki.min.js"></script>
<script>
var pz_type = 'simpla';
var pz_password = '{$settings->pz_password}';
var pz_server = '{$settings->pz_server}';
var pz_phone = '{$settings->pz_phones[$manager->login]}';
{literal}
function NotificationBar(message)
{
ttop = $('body').height()-110;
var HTMLmessage = "<div class='notification-message' style=' text-align:center; line-height: 40px;'> " + message + " </div>";
if ($('#notification-bar').size() == 0)
{
$('body').prepend("<div id='notification-bar' style='-moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; display:none; height: 40px; padding: 20px; background-color: #fff; position: fixed; top:"+ttop+"px; right:30px; z-index: 100; color: #000;border: 1px solid #cccccc;'>" + HTMLmessage + "</div>");
}
else
{
$('#notification-bar').html(HTMLmessage);
}
$('#notification-bar').slideDown();
}
$(window).on("blur focus", function (e) {
if ($(this).data('prevType') !== e.type) {
$(this).data('prevType', e.type);
switch (e.type) {
case 'focus':
if (!pz.isConnected()) {
pz.connect({
client_id: pz_password,
client_type: pz_type,
host: pz_server
});
}
break;
}
}
});
$(function() {
// Простые звонки
pz.setUserPhone(pz_phone);
pz.connect({
client_id: pz_password,
client_type: pz_type,
host: pz_server
});
pz.onConnect(function () {
$(".ip_call").addClass('phone');
});
pz.onDisconnect(function () {
$(".ip_call").removeClass('phone');
});
$(".ip_call").click( function() {
var phone = $(this).attr('data-phone').trim();
pz.call(phone);
return false;
});
pz.onEvent(function (event) {
if (event.isIncoming()) {
$.ajax({
type: "GET",
url: "ajax/search_orders.php",
data: { keyword: event.from, limit:"1"},
dataType: 'json'
}).success(function(data){
if(event.to == pz_phone)
if(data.length>0)
{
NotificationBar('<img src="design/images/phone_sound.png" align=absmiddle> Звонит <a href="index.php?module=OrderAdmin&id='+data[0].id+'">'+data[0].name+'</a>');
}
else
{
NotificationBar('<img src="design/images/phone_sound.png" align=absmiddle> Звонок с '+event.from+'. <a href="index.php?module=OrderAdmin&phone='+event.from+'">Создать заказ</a>');
}
});
}
});
{/literal}
});
</script>
{/if}
{literal}
<script>
$(function() {
if($.browser.opera)
$("#logout").hide();
$("#logout").click( function(event) {
event.preventDefault();
if($.browser.msie)
{
try{document.execCommand("ClearAuthenticationCache");}
catch (exception){}
window.location.href='/';
}
else
{
$.ajax({
url: $(this).attr('href'),
username: '',
password: '',
complete: function () {
window.location.href='/';
},
beforeSend : function(req) {
req.setRequestHeader('Authorization', 'Basic');
}
});
}
});
{/literal}
});
</script>

View File

@@ -0,0 +1,71 @@
{capture name=tabs}
<li class="active"><a href="index.php?module=LicenseAdmin">Лицензия</a></li>
{/capture}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<!-- Левая колонка свойств товара -->
<div id="column_left">
<div class=block>
{if $license->valid}
<h2 style='color:green;'>Лицензия действительна {if $license->expiration != '*'}до {$license->expiration}{/if} для домен{$license->domains|count|plural:'а':'ов'} {foreach $license->domains as $d}{$d}{if !$d@last}, {/if}{/foreach}</h2>
{else}
<h2 style='color:red;'>Лицензия недействительна</h2>
{/if}
<textarea name=license style='width:420px; height:100px;'>{$config->license|escape}</textarea>
</div>
<div class=block>
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
<a href='http://simplacms.ru/check?domain={$smarty.server.HTTP_HOST|escape}'>Проверить лицензию</a>
</div>
</div>
<div id="column_right">
<div class=block>
<h2>Лицензионное соглашение</h2>
<textarea style='width:420px; height:250px;'>Настоящее пользовательское соглашение (далее — Соглашение) является юридическим соглашением между Пользователем системы управления сайтами «Simpla» (далее — Продуктом) и Пикусовым Д. С. (далее — Автором).
Соглашение относится ко всем распространяемым версиям или модификациям программного Продукта.
Все положения Соглашения распространяются как на Продукт в целом, так и на его отдельные компоненты, за исключением компонентов, описанных в п.7 данного Соглашения.
Соглашение вступает в силу непосредственно в момент получения Пользователем копии Продукта посредством электронных средств передачи данных либо на физических носителях.
Соглашение дает Пользователю право использовать Продукт в рамках одного сайта (интернет-магазина), который работает в пределах одного полного доменного имени на протяжении двух недель с момента вступления в силу Соглашения.
Автор не несет ответственность за какие-либо убытки и/или ущерб (в том числе, убытки в связи недополученной коммерческой выгодой, прерыванием коммерческой и производственной деятельности, утратой данных), возникающие в связи с использованием или невозможностью использования Продукта, даже если Автор был уведомлен о возможном возникновении таких убытков и/или ущерба.
Продукт поставляется на условиях «как есть» без предоставления гарантий производительности, покупательной способности, сохранности данных, а также иных явно выраженных или предполагаемых гарантий. Автор не несёт какой-либо ответственности за причинение или возможность причинения вреда Пользователю, его информации или его бизнесу вследствие использования или невозможности использования Продукта.
Автор не несёт ответственность, связанную с привлечением Пользователя или третьих лиц к административной или уголовной ответственности за использование Продукта в противозаконных целях (включая, но не ограничиваясь, продажей через Интернет магазин объектов, изъятых из оборота или добытых преступным путём, предназначенных для разжигания межрасовой или межнациональной вражды и т.д.).
Продукт содержит компоненты, на которые не распространяется действие настоящего Соглашения. Эти компоненты предоставляются и распространяются в соответствии с собственными лицензиями. Таковыми компонентами являются:
— Визуальный редактор TinyMCE;
— Файловый менеджер SMExplorer;
— Менеджер изображений SMImage;
— Редактор кода Codemirror;
— Скрипт просмотра изображений EnlargeIt.
Пользователь не имеет права продавать, распространять или использовать Продукт без согласия Автора.
Пользователь имеет право модифицировать Продукт по своему усмотрению. При этом последующее использование Продукта должно осуществляться в соответствии с данным Соглашением и при условии сохранения всех авторских прав.
Автор оставляет за собой право в любое время изменять условия Соглашения без предварительного уведомления.
Получение экземпляра Продукта, его использование и/или хранение автоматически означает
а) осведомленность Пользователя о содержании Соглашения;
б) принятие его положений;
в) выполнение условий данного Соглашения.
Официальный сайт Продукта: simplacms.ru
</textarea>
</div>
</div>
<!-- Левая колонка свойств товара (The End)-->
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,86 @@
{capture name=tabs}
{if in_array('currency', $manager->permissions)}<li><a href="index.php?module=CurrencyAdmin">Валюты</a></li>{/if}
{if in_array('delivery', $manager->permissions)}<li><a href="index.php?module=DeliveriesAdmin">Доставка</a></li>{/if}
{if in_array('payment', $manager->permissions)}<li><a href="index.php?module=PaymentMethodsAdmin">Оплата</a></li>{/if}
{if in_array('managers', $manager->permissions)}<li><a href="index.php?module=ManagersAdmin">Менеджеры</a></li>{/if}
<li class="active"><a href="index.php?module=MailingMethodsAdmin">Рассылка</a></li>
{/capture}
{* Title *}
{$meta_title='Управление Рассылкой' scope=parent}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* Заголовок *}
<div id="header">
<h1><a{if !$smarty.get.show} class="dash_link"{/if} href="index.php?module=MailingMethodsAdmin">Рассылка</a></h1><h1>|</h1><h1><a{if $smarty.get.show} class="dash_link"{/if} href="index.php?module=MailingMethodsAdmin&show=subscribers">Список подписчиков</a></h1>
</div>
{literal}
<style>.interactive{margin:5px 20px;position:absolute;display:none;}</style>
<script type="text/javascript">
$(document).ready(function () {
$('form#mailpost_form').submit(function(){
mail_letter = tinyMCE.activeEditor.getContent();
mail_header = $("#mailpost_form #mail_header").val();
if(mail_letter != '' && mail_header != ''){
$('#mail_submit').prop("disabled", true);
$('.interactive').css('display', 'none');
$('.interactive.loading').css('display', 'inline');
$.ajax({
type: 'POST',
url: 'index.php?module=MailingMethodsAdmin',
data: 'session_id='+$("#mailpost_form #session_id").val()+'&header='+mail_header+'&letter='+mail_letter,
success: function(data){
$('.interactive.loading').css('display', 'none');
$('.interactive.complete').css('display', 'inline');
$('.interactive.complete').css('display', 'inline');
$('#mail_submit').val('Рассылка завершена');
}
});
}
return false;
});
});
</script>
{/literal}
<div id="main_div">
{if $smarty.get.show}
<form id="list_form" method="post" action="index.php?module=MailingMethodsAdmin&show=subscribers">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{$a=1}{foreach $mailing_email item=email key=id}{$a=$a+1}
<div class="row{if $a%2===0} even{/if}">
<div class="checkbox cell">
<input type="checkbox" name="remove[]" value="{$id}" />
</div>
<div class="name cell">{$email}</div>
<div class="icons cell">
<a class="delete" title="Удалить" href="index.php?module=MailingMethodsAdmin&show=subscribers&remove={$id}"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label onclick="$('#list input[type=checkbox]').attr('checked', true);" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
{else}
<form id="mailpost_form" method="post" action="index.php?module=MailingMethodsAdmin">
<input type="hidden" id="session_id" name="session_id" value="{$smarty.session.id}">
<p style="margin-bottom:10px"><label><b>Тема письма:&nbsp&nbsp</b></label><input id="mail_header" type="text" name="header" style="width:50%" /></p>
<p><textarea id="mail_letter" name="letter" class="editor_small"></textarea></p>
<p style="text-align:center;margin-top:20px;"><input class="button_green" id="mail_submit" type="submit" value="Разослать" style="margin-right: -12px;" /><img title="Выполняется рассылка" class="interactive loading" src="http://belfast.by/images/ajx_loading.gif"><img title="Рассылка завершена" class="interactive complete" src="design/images/accept.png"></p>
</form>
{/if}
</div>

View File

@@ -0,0 +1,142 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('settings', $manager->permissions)}<li><a href="index.php?module=SettingsAdmin">Настройки</a></li>{/if}
{if in_array('currency', $manager->permissions)}<li><a href="index.php?module=CurrencyAdmin">Валюты</a></li>{/if}
{if in_array('delivery', $manager->permissions)}<li><a href="index.php?module=DeliveriesAdmin">Доставка</a></li>{/if}
{if in_array('payment', $manager->permissions)}<li><a href="index.php?module=PaymentMethodsAdmin">Оплата</a></li>{/if}
<li class="active"><a href="index.php?module=ManagersAdmin">Менеджеры</a></li>
{/capture}
{if $m->login}
{$meta_title = $m->login scope=parent}
{else}
{$meta_title = 'Новый менеджер' scope=parent}
{/if}
{* On document load *}
<script src="design/js/jquery/jquery.js"></script>
<script src="design/js/jquery/jquery-ui.min.js"></script>
<script>
{literal}
$(function() {
// Выделить все
$("#check_all").click(function() {
$('input[type="checkbox"][name*="permissions"]:not(:disabled)').attr('checked', $('input[type="checkbox"][name*="permissions"]:not(:disabled):not(:checked)').length>0);
});
{/literal}{if $m->login}$('#password_input').hide();{/if}{literal}
$('#change_password').click(function() {
$('#password_input').show();
});
});
{/literal}
</script>
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='added'}Менеджер добавлен{elseif $message_success=='updated'}Менеджер обновлен{else}{$message_success|escape}{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>
{if $message_error=='login_exists'}Менеджер с таким логином уже существует
{elseif $message_error=='empty_login'}Введите логин
{elseif $message_error=='not_writable'}Установите права на запись для файла /simpla/.passwd
{else}{$message_error|escape}{/if}
</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
Логин:
<input class="name" name="login" type="text" value="{$m->login|escape}" maxlength="32"/>
<input name="old_login" type="hidden" value="{$m->login|escape}"/>
Пароль:
{if $m->login}<a class="dash_link"id="change_password">изменить</a>{/if}
<input id="password_input" class="name" name="password" type="password" value=""/>
</div>
<!-- Левая колонка -->
<div id="column_left">
<h2>Права доступа: </h2>
<div class="block"><label id="check_all" class="dash_link">Выбрать все</label></div>
<!-- Параметры -->
<div class="block">
<ul>
{$perms = [
'products' =>'Товары',
'categories' =>'Категории',
'brands' =>'Бренды',
'banners' => 'Банеры',
'features' =>'Свойства товаров',
'orders' =>'Заказы',
'labels' =>'Метки заказов',
'users' =>'Покупатели',
'groups' =>'Группы покупателей',
'coupons' =>'Купоны',
'pages' =>'Страницы',
'blog' =>'Блог',
'comments' =>'Комментарии',
'feedbacks' =>'Обратная связь',
'import' =>'Импорт',
'export' =>'Экспорт',
'backup' =>'Бекап',
'stats' =>'Статистика',
'design' =>'Дизайн',
'settings' =>'Настройки',
'currency' =>'Валюты',
'delivery' =>'Способы доставки',
'payment' =>'Способы оплаты',
'managers' =>'Менеджеры',
'license' =>'Управление лицензией',
'callbacks' =>'Заказ обратного звонка',
'articles' => 'Статьи',
'articles_categories' => 'Категории статей',
'marka' => 'Марка авто',
'model' => 'Модель авто'
]}
{foreach $perms as $p=>$name}
<li><label class=property for="{$p}">{$name}</label>
<input id="{$p}" name="permissions[]" class="simpla_inp" type="checkbox" value="{$p}"
{if $m->permissions && in_array($p, $m->permissions)}checked{/if} {if $m->login==$manager->login}disabled{/if}/></li>
{/foreach}
</ul>
</div>
<!-- Параметры (The End)-->
</div>
<!-- Левая колонка (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,116 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('settings', $manager->permissions)}<li><a href="index.php?module=SettingsAdmin">Настройки</a></li>{/if}
{if in_array('currency', $manager->permissions)}<li><a href="index.php?module=CurrencyAdmin">Валюты</a></li>{/if}
{if in_array('delivery', $manager->permissions)}<li><a href="index.php?module=DeliveriesAdmin">Доставка</a></li>{/if}
{if in_array('payment', $manager->permissions)}<li><a href="index.php?module=PaymentMethodsAdmin">Оплата</a></li>{/if}
<li class="active"><a href="index.php?module=ManagersAdmin">Менеджеры</a></li>
{/capture}
{* Title *}
{$meta_title='Менеджеры' scope=parent}
{* Заголовок *}
<div id="header">
<h1>{$managers_count} {$managers_count|plural:'менеджер':'менеджеров':'менеджера'}</h1>
<a class="add" href="index.php?module=ManagerAdmin">Добавить менеджера</a>
</div>
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>
{if $message_error=='not_writable'}Установите права на запись для файла /simpla/.passwd
{else}{$message_error|escape}{/if}
</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $managers}
<!-- Основная часть -->
<div id="main_list">
<form id="form_list" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $managers as $m}
<div class="row">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$m->login|escape}" {if $manager->login == $m->login}disabled{/if}/>
</div>
<div class="user_name cell">
<a href="index.php?module=ManagerAdmin&login={$m->login|urlencode}">{$m->login|escape}</a>
</div>
<div class="user_email cell">
<a href="mailto:{$user->name|escape}<{$user->email|escape}>">{$user->email|escape}</a>
</div>
<div class="user_group cell">
{$groups[$user->group_id]->name}
</div>
<div class="icons cell">
{if $manager->login != $m->login}
<a class="delete" title="Удалить" href="#"></a>
{/if}
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id=select>
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
</div>
{/if}
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]:not(:disabled)').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:disabled):not(:checked)').length>0);
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтверждение удаления
$("form").submit(function() {
if($('#list input[type="checkbox"][name*="check"]:checked').length>0)
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,209 @@
{* Вкладки *}
{capture name=tabs}
<li><a href="index.php?module=BlogAdmin">Блог</a></li>
<li><a href="index.php?module=ArticlesAdmin">Примеры работ</a></li>
<li><a href="index.php?module=ArticleCategoriesAdmin">Категории примеров работ</a></li>
<li><a href="{url module=ActionsAdmin id=null page=null}">Акции</a></li>
<li class="active"><a href="{url module=MarkasAdmin id=null page=null}">Марки и модели</a></li>
{/capture}
{if $brand->id}
{$meta_title = $brand->name scope=parent}
{else}
{$meta_title = 'Новая марка' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<script>
$(function() {
// Удаление изображений
$(".images a.delete").click( function() {
$("input[name='delete_image']").val('1');
$(this).closest("ul").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Автозаполнение мета-тегов
meta_title_touched = true;
meta_keywords_touched = true;
meta_description_touched = true;
url_touched = true;
if($('input[name="meta_title"]').val() == generate_meta_title() || $('input[name="meta_title"]').val() == '')
meta_title_touched = false;
if($('input[name="meta_keywords"]').val() == generate_meta_keywords() || $('input[name="meta_keywords"]').val() == '')
meta_keywords_touched = false;
if($('textarea[name="meta_description"]').val() == generate_meta_description() || $('textarea[name="meta_description"]').val() == '')
meta_description_touched = false;
if($('input[name="url"]').val() == generate_url() || $('input[name="url"]').val() == '')
url_touched = false;
$('input[name="meta_title"]').change(function() { meta_title_touched = true; });
$('input[name="meta_keywords"]').change(function() { meta_keywords_touched = true; });
$('input[textarea="meta_description"]').change(function() { meta_description_touched = true; });
$('input[name="url"]').change(function() { url_touched = true; });
$('input[name="name"]').keyup(function() { set_meta(); });
function set_meta()
{ return;
{/literal} {if $brand->id} return; {/if} {literal}
if(!meta_title_touched)
$('input[name="meta_title"]').val(generate_meta_title());
if(!meta_keywords_touched)
$('input[name="meta_keywords"]').val(generate_meta_keywords());
if(!meta_description_touched)
$('textarea[name="meta_description"]').val(generate_meta_description());
if(!url_touched)
$('input[name="url"]').val(generate_url());
}
function generate_meta_title()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_keywords()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_description()
{
name = $('input[name="name"]').val();
return name;
}
function generate_url()
{
{/literal} {if $brand->id} return; {/if} {literal}
url = $('input[name="name"]').val();
url = url.replace(/[\s]+/gi, '-');
url = translit(url);
url = url.replace(/[^0-9a-z_\-]+/gi, '').toLowerCase();
return url;
}
function translit(str)
{
var ru=("А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я").split("-")
var en=("A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch-'-'-Y-y-'-'-E-e-YU-yu-YA-ya").split("-")
var res = '';
for(var i=0, l=str.length; i<l; i++)
{
var s = str.charAt(i), n = ru.indexOf(s);
if(n >= 0) { res += en[n]; }
else { res += s; }
}
return res;
}
});
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='added'}Марка добавлена{elseif $message_success=='updated'}Марка обновлена{else}{$message_success}{/if}</span>
<a class="link" target="_blank" href="../nashi-raboty/{$brand->url}/">Открыть на сайте</a>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error=='url_exists'}Марка с таким адресом уже существует{else}{$message_error}{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$brand->name|escape}"/>
<input name=id type="hidden" value="{$brand->id|escape}"/>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block layer">
<h2>Параметры страницы</h2>
<ul>
<li><label class=property>Адрес</label><div class="page_url"> /nashi-raboty/</div><input name="url" class="page_url" type="text" value="{$brand->url|escape}" /></li>
<li><label class=property>Заголовок</label><input name="meta_title" class="simpla_inp" type="text" value="{$brand->meta_title|escape}" /></li>
<li><label class=property>Ключевые слова</label><input name="meta_keywords" class="simpla_inp" type="text" value="{$brand->meta_keywords|escape}" /></li>
<li><label class=property>Описание</label><textarea name="meta_description" class="simpla_inp" />{$brand->meta_description|escape}</textarea></li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
{*
<!-- Экспорт-->
<div class="block">
<h2>Экспорт товара</h2>
<ul>
<li><input id="exp_yad" type="checkbox" /> <label for="exp_yad">Яндекс Маркет</label> Бид <input class="simpla_inp" type="" name="" value="12" /> руб.</li>
<li><input id="exp_goog" type="checkbox" /> <label for="exp_goog">Google Base</label> </li>
</ul>
</div>
<!-- Свойства товара (The End)-->
*}
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<!-- Изображение категории -->
<div class="block layer images">
<h2>Изображение</h2>
<input class='upload_image' name=image type=file>
<input type=hidden name="delete_image" value="">
{if $brand->image}
<ul>
<li>
<a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a>
<img src="../{$config->marka_images_dir}{$brand->image}" alt="" />
</li>
</ul>
{/if}
</div>
</div>
<!-- Правая колонка свойств товара (The End)-->
<!-- Описагние бренда -->
<div class="block layer">
<h2>Описание</h2>
<textarea name="description" class="editor_large">{$brand->description|escape}</textarea>
</div>
<!-- Описание бренда (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,134 @@
{* Вкладки *}
{capture name=tabs}
<li><a href="index.php?module=BlogAdmin">Блог</a></li>
<li><a href="index.php?module=ArticlesAdmin">Примеры работ</a></li>
<li><a href="index.php?module=ArticleCategoriesAdmin">Категории примеров работ</a></li>
<li><a href="{url module=ActionsAdmin id=null page=null}">Акции</a></li>
<li class="active"><a href="{url module=MarkasAdmin id=null page=null}">Марки и модели</a></li>
{/capture}
{* Title *}
{$meta_title='Марки' scope=parent}
{* Заголовок *}
<div id="header">
<h1>Марки</h1>
<a class="add" href="{url module=MarkaAdmin return=$smarty.server.REQUEST_URI}">Добавить Марку</a>
{*<a style="margin-left:15px" class="add" href="{url module=ModelAdmin return=$smarty.server.REQUEST_URI}">Добавить модель</a>*}
</div>
{if $brands}
<div id="main_list" class="brands">
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list" class="brands">
{foreach $brands as $brand}
<div class="row {if !$brand->visible}invisible{/if}">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$brand->id}" />
</div>
<div class="cell">
<a href="{url module=MarkaAdmin id=$brand->id return=NULL}">{$brand->name|escape}</a>
{if $brand->models}
<ul class="marka-models">
{foreach $brand->models as $model}
<li><a href="{url module=ModelAdmin id=$model->id return=NULL}">{$model->name|escape}</a> </li>
{/foreach}
</ul>
{/if}
</div>
<div class="icons cell">
<a href="/simpla/index.php?module=ModelAdmin&marka_id={$brand->id}" class="link-add">Добавить модель</a>
<a class="enable" title="Активна" href="#"></a>
<a class="preview" title="Предпросмотр в новом окне" href="../nashi-raboty/{$brand->url}/" target="_blank"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
</div>
{else}
Нет брендов
{/if}
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'marka', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest("div.row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтверждение удаления
$("form").submit(function() {
if($('#list input[type="checkbox"][name*="check"]:checked').length>0)
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,219 @@
{* Вкладки *}
{capture name=tabs}
<li><a href="index.php?module=BlogAdmin">Блог</a></li>
<li><a href="index.php?module=ArticlesAdmin">Примеры работ</a></li>
<li><a href="index.php?module=ArticleCategoriesAdmin">Категории примеров работ</a></li>
<li><a href="{url module=ActionsAdmin id=null page=null}">Акции</a></li>
<li class="active"><a href="{url module=MarkasAdmin id=null page=null}">Марки и модели</a></li>
{/capture}
{if $brand->id}
{$meta_title = $brand->name scope=parent}
{else}
{$meta_title = 'Новая модель' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<script>
$(function() {
// Удаление изображений
$(".images a.delete").click( function() {
$("input[name='delete_image']").val('1');
$(this).closest("ul").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Автозаполнение мета-тегов
meta_title_touched = true;
meta_keywords_touched = true;
meta_description_touched = true;
url_touched = true;
if($('input[name="meta_title"]').val() == generate_meta_title() || $('input[name="meta_title"]').val() == '')
meta_title_touched = false;
if($('input[name="meta_keywords"]').val() == generate_meta_keywords() || $('input[name="meta_keywords"]').val() == '')
meta_keywords_touched = false;
if($('textarea[name="meta_description"]').val() == generate_meta_description() || $('textarea[name="meta_description"]').val() == '')
meta_description_touched = false;
if($('input[name="url"]').val() == generate_url() || $('input[name="url"]').val() == '')
url_touched = false;
$('input[name="meta_title"]').change(function() { meta_title_touched = true; });
$('input[name="meta_keywords"]').change(function() { meta_keywords_touched = true; });
$('input[textarea="meta_description"]').change(function() { meta_description_touched = true; });
$('input[name="url"]').change(function() { url_touched = true; });
$('input[name="name"]').keyup(function() { set_meta(); });
function set_meta()
{ return;
{/literal} {if $brand->id} return; {/if} {literal}
if(!meta_title_touched)
$('input[name="meta_title"]').val(generate_meta_title());
if(!meta_keywords_touched)
$('input[name="meta_keywords"]').val(generate_meta_keywords());
if(!meta_description_touched)
$('textarea[name="meta_description"]').val(generate_meta_description());
if(!url_touched)
$('input[name="url"]').val(generate_url());
}
function generate_meta_title()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_keywords()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_description()
{
name = $('input[name="name"]').val();
return name;
}
function generate_url()
{
{/literal} {if $brand->id} return; {/if} {literal}
url = $('input[name="name"]').val();
url = url.replace(/[\s]+/gi, '-');
url = translit(url);
url = url.replace(/[^0-9a-z_\-]+/gi, '').toLowerCase();
return url;
}
function translit(str)
{
var ru=("А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я").split("-")
var en=("A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch-'-'-Y-y-'-'-E-e-YU-yu-YA-ya").split("-")
var res = '';
for(var i=0, l=str.length; i<l; i++)
{
var s = str.charAt(i), n = ru.indexOf(s);
if(n >= 0) { res += en[n]; }
else { res += s; }
}
return res;
}
});
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='added'}Модель добавлена{elseif $message_success=='updated'}Модель обновлена{else}{$message_success}{/if}</span>
<a class="link" target="_blank" href="../nashi-raboty/{$brand->marka->url}/{$brand->url}/">Открыть на сайте</a>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error=='url_exists'}Модель с таким адресом уже существует{else}{$message_error}{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$brand->name|escape}"/>
<input name=id type="hidden" value="{$brand->id|escape}"/>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block layer">
<h2>Параметры страницы</h2>
<ul>
<li><label class=property>Адрес</label><div class="page_url"> /nashi-raboty/</div><input name="url" class="page_url" type="text" value="{$brand->url|escape}" /></li>
<li>
<label class=property>Марка</label>
<select name="marka_id">
<option value='0' {if !$brand->marka_id}selected{/if} marka_name=''>Не указан</option>
{foreach from=$markas item=marka}
<option {if !$marka->visible}style="color:#999"{/if} value='{$marka->id}' {if $brand->marka_id == $marka->id}selected{/if} marka_name='{$marka->name|escape}'>{$marka->name|escape}</option>
{/foreach}
</select>
</li>
<li><label class=property>Заголовок</label><input name="meta_title" class="simpla_inp" type="text" value="{$brand->meta_title|escape}" /></li>
<li><label class=property>Ключевые слова</label><input name="meta_keywords" class="simpla_inp" type="text" value="{$brand->meta_keywords|escape}" /></li>
<li><label class=property>Описание</label><textarea name="meta_description" class="simpla_inp" />{$brand->meta_description|escape}</textarea></li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
{*
<!-- Экспорт-->
<div class="block">
<h2>Экспорт товара</h2>
<ul>
<li><input id="exp_yad" type="checkbox" /> <label for="exp_yad">Яндекс Маркет</label> Бид <input class="simpla_inp" type="" name="" value="12" /> руб.</li>
<li><input id="exp_goog" type="checkbox" /> <label for="exp_goog">Google Base</label> </li>
</ul>
</div>
<!-- Свойства товара (The End)-->
*}
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<!-- Изображение категории -->
<div class="block layer images">
<h2>Изображение</h2>
<input class='upload_image' name=image type=file>
<input type=hidden name="delete_image" value="">
{if $brand->image}
<ul>
<li>
<a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a>
<img src="../{$config->model_images_dir}{$brand->image}" alt="" />
</li>
</ul>
{/if}
</div>
</div>
<!-- Правая колонка свойств товара (The End)-->
<!-- Описагние бренда -->
<div class="block layer">
<h2>Описание</h2>
<textarea name="description" class="editor_large">{$brand->description|escape}</textarea>
</div>
<!-- Описание бренда (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,121 @@
{* Вкладки *}
{capture name=tabs}
<li><a href="index.php?module=BlogAdmin">Блог</a></li>
<li><a href="index.php?module=ArticlesAdmin">Примеры работ</a></li>
<li><a href="index.php?module=ArticleCategoriesAdmin">Категории примеров работ</a></li>
<li><a href="{url module=ActionsAdmin id=null page=null}">Акции</a></li>
<li ><a href="{url module=MarkasAdmin id=null page=null}">Марки</a></li>
<li class="active"><a href="{url module=ModelsAdmin id=null page=null}">Модели</a></li>
{/capture}
{* Title *}
{$meta_title='Модели' scope=parent}
{* Заголовок *}
<div id="header">
<h1>Модели</h1>
<a class="add" href="{url module=ModelAdmin return=''}">Добавить модель</a>
</div>
{if $brands}
<div id="main_list" class="brands">
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list" class="brands">
{foreach $brands as $brand}
<div class="row {if !$brand->visible}invisible{/if}">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$brand->id}" />
</div>
<div class="cell">
<a href="{url module=ModelAdmin id=$brand->id return=''}">{$brand->marka->name|escape} - {$brand->name|escape}</a>
</div>
<div class="icons cell">
<a class="enable" title="Активна" href="#"></a>
<a class="preview" title="Предпросмотр в новом окне" href="../nashi-raboty/{$brand->marka->url}/{$brand->url}/" target="_blank"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
</div>
{else}
Нет моделей
{/if}
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'model', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest("div.row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтверждение удаления
$("form").submit(function() {
if($('#list input[type="checkbox"][name*="check"]:checked').length>0)
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,615 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('orders', $manager->permissions)}
<li {if $order->status==0}class="active"{/if}><a href="index.php?module=OrdersAdmin&status=0">Новые</a></li>
<li {if $order->status==1}class="active"{/if}><a href="index.php?module=OrdersAdmin&status=1">Приняты</a></li>
<li {if $order->status==2}class="active"{/if}><a href="index.php?module=OrdersAdmin&status=2">Выполнены</a></li>
<li {if $order->status==3}class="active"{/if}><a href="index.php?module=OrdersAdmin&status=3">Удалены</a></li>
<li {if $order->status==999}class="active"{/if}><a href="index.php?module=PreordersAdmin&status=999">Потеряны</a></li>
{if $keyword}
<li class="active"><a href="{url module=OrdersAdmin keyword=$keyword id=null label=null}">Поиск</a></li>
{/if}
{/if}
{if in_array('labels', $manager->permissions)}
<li><a href="{url module=OrdersLabelsAdmin keyword=null id=null page=null label=null}">Метки</a></li>
{/if}
{/capture}
{if $order->id}
{$meta_title = "Заказ №`$order->id`" scope=parent}
{else}
{$meta_title = 'Новый заказ' scope=parent}
{/if}
<!-- Основная форма -->
<form method=post id=order enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input name=id type="hidden" value="{$order->id|escape}"/>
<h1>{if $order->id}Заказ №{$order->id|escape}{else}Новый заказ{/if}
{if $order->status != 999}
<select class=status name="status">
<option value='0' {if $order->status == 0}selected{/if}>Новый</option>
<option value='1' {if $order->status == 1}selected{/if}>Принят</option>
<option value='2' {if $order->status == 2}selected{/if}>Выполнен</option>
<option value='3' {if $order->status == 3}selected{/if}>Удален</option>
</select>
{/if}
</h1>
<a href="{url view=print id=$order->id}" target="_blank"><img src="./design/images/printer.png" name="export" title="Печать заказа"></a>
<div id=next_order>
{if $prev_order}
<a class=prev_order href="{url id=$prev_order->id}">←</a>
{/if}
{if $next_order}
<a class=next_order href="{url id=$next_order->id}">→</a>
{/if}
</div>
</div>
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error=='error_closing'}Нехватка товара на складе{else}{$message_error|escape}{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{elseif $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='updated'}Заказ обновлен{elseif $message_success=='added'}Заказ добавлен{else}{$message_success}{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
<div id="order_details">
<h2>Детали заказа <a href='#' class="edit_order_details"><img src='design/images/pencil.png' alt='Редактировать' title='Редактировать'></a></h2>
<div id="user">
<ul class="order_details">
<li>
<label class=property>Дата</label>
<div class="edit_order_detail view_order_detail">
{$order->date} {$order->time}
</div>
</li>
<li>
<label class=property>Имя</label>
<div class="edit_order_detail" style='display:none;'>
<input name="name" class="simpla_inp" type="text" value="{$order->name|escape}" />
</div>
<div class="view_order_detail">
{$order->name|escape}
</div>
</li>
<li>
<label class=property>Фамилия</label>
<div class="edit_order_detail" style='display:none;'>
<input name="name2" class="simpla_inp" type="text" value="{$order->name2|escape}" />
</div>
<div class="view_order_detail">
{$order->name2|escape}
</div>
</li>
<li>
<label class=property>Email</label>
<div class="edit_order_detail" style='display:none;'>
<input name="email" class="simpla_inp" type="text" value="{$order->email|escape}" />
</div>
<div class="view_order_detail">
<a href="mailto:{$order->email|escape}?subject=Заказ%20№{$order->id}">{$order->email|escape}</a>
</div>
</li>
<li>
<label class=property>Телефон</label>
<div class="edit_order_detail" style='display:none;'>
<input name="phone" class="simpla_inp " type="text" value="{$order->phone|escape}" />
</div>
<div class="view_order_detail">
{if $order->phone}
<span class="ip_call" data-phone="{$order->phone|escape}" target="_blank">{$order->phone|escape}</span>{else}{$order->phone|escape}{/if}
</div>
</li>
<li>
<label class=property>Страна</label>
<div class="edit_order_detail" style='display:none;'>
<input name="country" class="simpla_inp" type="text" value="{$order->country|escape}" />
</div>
<div class="view_order_detail">
{$order->country|escape}
</div>
</li>
<li>
<label class=property>Регион</label>
<div class="edit_order_detail" style='display:none;'>
<input name="region" class="simpla_inp" type="text" value="{$order->region|escape}" />
</div>
<div class="view_order_detail">
{$order->region|escape}
</div>
</li>
<li>
<label class=property>Город</label>
<div class="edit_order_detail" style='display:none;'>
<input name="city" class="simpla_inp" type="text" value="{$order->city|escape}" />
</div>
<div class="view_order_detail">
{$order->city|escape}
</div>
</li>
<li>
<label class=property>Индекс</label>
<div class="edit_order_detail" style='display:none;'>
<input name="indx" class="simpla_inp" type="text" value="{$order->indx|escape}" />
</div>
<div class="view_order_detail">
{$order->indx|escape}
</div>
</li>
<li>
<label class=property>Адрес <a href='http://maps.yandex.ru/' id=address_link target=_blank><img align=absmiddle src='design/images/map.png' alt='Карта в новом окне' title='Карта в новом окне'></a></label>
<div class="edit_order_detail" style='display:none;'>
<textarea name="address">{$order->address|escape}</textarea>
</div>
<div class="view_order_detail">
{$order->address|escape}
</div>
</li>
<li>
<label class=property>Комментарий пользователя</label>
<div class="edit_order_detail" style='display:none;'>
<textarea name="comment">{$order->comment|escape}</textarea>
</div>
<div class="view_order_detail">
{$order->comment|escape|nl2br}
</div>
</li>
</ul>
</div>
{if $labels}
<div class='layer'>
<h2>Метка</h2>
<!-- Метки -->
<ul>
{foreach $labels as $l}
<li>
<label for="label_{$l->id}">
<input id="label_{$l->id}" type="checkbox" name="order_labels[]" value="{$l->id}" {if in_array($l->id, $order_labels)}checked{/if}>
<span style="background-color:#{$l->color};" class="order_label"></span>
{$l->name}
</label>
</li>
{/foreach}
</ul>
<!-- Метки -->
</div>
{/if}
<div class='layer'>
<h2>Покупатель <a href='#' class="edit_user"><img src='design/images/pencil.png' alt='Редактировать' title='Редактировать'></a> {if $user}<a href="#" class='delete_user'><img src='design/images/delete.png' alt='Удалить' title='Удалить'></a>{/if}</h2>
<div class='view_user'>
{if !$user}
Не зарегистрирован
{else}
<a href='index.php?module=UserAdmin&id={$user->id}' target=_blank>{$user->name|escape}</a> ({$user->email|escape})
{/if}
</div>
<div class='edit_user' style='display:none;'>
<input type=hidden name=user_id value='{$user->id}'>
<input type=text id='user' class="input_autocomplete" placeholder="Выберите пользователя">
</div>
</div>
<div class='layer'>
<h2>Примечание <a href='#' class="edit_note"><img src='design/images/pencil.png' alt='Редактировать' title='Редактировать'></a></h2>
<ul class="order_details">
<li>
<div class="edit_note" style='display:none;'>
<label class=property>Ваше примечание (не видно пользователю)</label>
<textarea name="note">{$order->note|escape}</textarea>
</div>
<div class="view_note" {if !$order->note}style='display:none;'{/if}>
<label class=property>Ваше примечание (не видно пользователю)</label>
<div class="note_text">{$order->note|escape}</div>
</div>
</li>
</ul>
</div>
</div>
<div id="purchases">
<div id="list" class="purchases">
{foreach from=$purchases item=purchase}
<div class="row">
<div class="image cell">
<input type=hidden name=purchases[id][{$purchase->id}] value='{$purchase->id}'>
{$image = $purchase->product->images|first}
{if $image}
<img class=product_icon src='{$image->filename|resize:35:35}'>
{/if}
</div>
<div class="purchase_name cell">
<div class='purchase_variant'>
<span class=edit_purchase style='display:none;'>
<select name=purchases[variant_id][{$purchase->id}] {if $purchase->product->variants|count==1 && $purchase->variant_name == '' && $purchase->variant->sku == ''}style='display:none;'{/if}>
{if !$purchase->variant}<option price='{$purchase->price}' amount='{$purchase->amount}' value=''>{$purchase->variant_name|escape} {if $purchase->sku}(арт. {$purchase->sku}){/if}</option>{/if}
{foreach $purchase->product->variants as $v}
{if $v->stock>0 || $v->id == $purchase->variant->id}
<option price='{$v->price}' amount='{$v->stock}' value='{$v->id}' {if $v->id == $purchase->variant_id}selected{/if} >
{$v->name}
{if $v->sku}(арт. {$v->sku}){/if}
</option>
{/if}
{/foreach}
</select>
</span>
<span class=view_purchase>
{$purchase->variant_name} {if $purchase->sku}(арт. {$purchase->sku}){/if}
</span>
</div>
{if $purchase->product}
<a class="related_product_name" href="index.php?module=ProductAdmin&id={$purchase->product->id}&return={$smarty.server.REQUEST_URI|urlencode}">{$purchase->product_name}</a>
{else}
{$purchase->product_name}
{/if}
<div class="features">
{foreach from=$purchase->options item=opt key=ok}
{assign var=f value=$features[$ok]}
<p>
<label>{$f->name} </label>
<span>
{$opt}
</span>
</p>
{/foreach}
</div>
</div>
<div class="price cell">
<span class=view_purchase>{$purchase->price}</span>
<span class=edit_purchase style='display:none;'>
<input type=text name=purchases[price][{$purchase->id}] value='{$purchase->price}' size=5>
</span>
{$currency->sign}
</div>
<div class="amount cell">
<span class=view_purchase>
{$purchase->amount} {$settings->units}
</span>
<span class=edit_purchase style='display:none;'>
{if $purchase->variant}
{math equation="min(max(x,y),z)" x=$purchase->variant->stock+$purchase->amount*($order->closed) y=$purchase->amount z=$settings->max_order_amount assign="loop"}
{else}
{math equation="x" x=$purchase->amount assign="loop"}
{/if}
<select name=purchases[amount][{$purchase->id}]>
{section name=amounts start=1 loop=$loop+1 step=1}
<option value="{$smarty.section.amounts.index}" {if $purchase->amount==$smarty.section.amounts.index}selected{/if}>{$smarty.section.amounts.index} {$settings->units}</option>
{/section}
</select>
</span>
</div>
<div class="icons cell">
{if !$order->closed}
{if !$purchase->product}
<img src='design/images/error.png' alt='Товар был удалён' title='Товар был удалён' >
{elseif !$purchase->variant}
<img src='design/images/error.png' alt='Вариант товара был удалён' title='Вариант товара был удалён' >
{elseif $purchase->variant->stock < $purchase->amount}
<img src='design/images/error.png' alt='На складе остал{$purchase->variant->stock|plural:'ся':'ось'} {$purchase->variant->stock} товар{$purchase->variant->stock|plural:'':'ов':'а'}' title='На складе остал{$purchase->variant->stock|plural:'ся':'ось'} {$purchase->variant->stock} товар{$purchase->variant->stock|plural:'':'ов':'а'}' >
{/if}
{/if}
<a href='#' class="delete" title="Удалить"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_purchase" class="row" style='display:none;'>
<div class="image cell">
<input type=hidden name=purchases[id][] value=''>
<img class=product_icon src=''>
</div>
<div class="purchase_name cell">
<div class='purchase_variant'>
<select name=purchases[variant_id][] style='display:none;'></select>
</div>
<a class="purchase_name" href=""></a>
</div>
<div class="price cell">
<input type=text name=purchases[price][] value='' size=5> {$currency->sign}
</div>
<div class="amount cell">
<select name=purchases[amount][]></select>
</div>
<div class="icons cell">
<a href='#' class="delete" title="Удалить"></a>
</div>
<div class="clear"></div>
</div>
</div>
<div id="add_purchase" {if $purchases}style='display:none;'{/if}>
<input type=text name=related id='add_purchase' class="input_autocomplete" placeholder='Выберите товар чтобы добавить его'>
</div>
{if $purchases}
<a href='#' class="dash_link edit_purchases">редактировать покупки</a>
{/if}
{if $purchases}
<div class="subtotal">
Всего<b> {$subtotal} {$currency->sign}</b>
</div>
{/if}
<div class="block discount layer">
<h2>Скидка</h2>
<input type=text name=discount value='{$order->discount}'> <span class=currency>%</span>
</div>
<div class="subtotal layer">
С учетом скидки<b> {($subtotal-$subtotal*$order->discount/100)|round:2} {$currency->sign}</b>
</div>
<div class="block discount layer">
<h2>Купон{if $order->coupon_code} ({$order->coupon_code}){/if}</h2>
<input type=text name=coupon_discount value='{$order->coupon_discount}'> <span class=currency>{$currency->sign}</span>
</div>
<div class="subtotal layer">
С учетом купона<b> {($subtotal-$subtotal*$order->discount/100-$order->coupon_discount)|round:2} {$currency->sign}</b>
</div>
<div class="block delivery">
<h2>Доставка</h2>
<select name="delivery_id">
<option value="0">Не выбрана</option>
{foreach $deliveries as $d}
<option value="{$d->id}" {if $d->id==$delivery->id}selected{/if}>{$d->name}</option>
{/foreach}
</select>
<input type=text name=delivery_price value='{$order->delivery_price}'> <span class=currency>{$currency->sign}</span>
<div class="separate_delivery">
<input type=checkbox id="separate_delivery" name=separate_delivery value='1' {if $order->separate_delivery}checked{/if}> <label for="separate_delivery">оплачивается отдельно</label>
</div>
</div>
<div class="total layer">
Итого<b> {$order->total_price} {$currency->sign}</b>
</div>
<div class="block payment">
<h2>Оплата</h2>
<select name="payment_method_id">
<option value="0">Не выбрана</option>
{foreach $payment_methods as $pm}
<option value="{$pm->id}" {if $pm->id==$payment_method->id}selected{/if}>{$pm->name}</option>
{/foreach}
</select>
<input type=checkbox name="paid" id="paid" value="1" {if $order->paid}checked{/if}> <label for="paid" {if $order->paid}class="green"{/if}>Заказ оплачен</label>
</div>
{if $payment_method}
<div class="subtotal layer">
К оплате<b> {$order->total_price|convert:$payment_currency->id} {$payment_currency->sign}</b>
</div>
{/if}
<div class="block_save">
<input type="checkbox" value="1" id="notify_user" name="notify_user">
<label for="notify_user">Уведомить покупателя о состоянии заказа</label>
<br /><textarea style="width: 342px; height: 95px;" name="additional_message"></textarea>
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</div>
</div>
</form>
<!-- Основная форма (The End) -->
{* On document load *}
{literal}
<script src="design/js/autocomplete/jquery.autocomplete-min.js"></script>
<style>
.autocomplete-w1 { background:url(img/shadow.png) no-repeat bottom right; position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; }
.autocomplete { border:1px solid #999; background:#FFF; cursor:default; text-align:left; overflow-x:auto; min-width: 300px; overflow-y: auto; margin:-6px 6px 6px -6px; /* IE6 specific: */ _height:350px; _margin:0; _overflow-x:hidden; }
.autocomplete .selected { background:#F0F0F0; }
.autocomplete div { padding:2px 5px; white-space:nowrap; }
.autocomplete strong { font-weight:normal; color:#3399FF; }
</style>
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Удаление товара
$(".purchases a.delete").live('click', function() {
$(this).closest(".row").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Добавление товара
var new_purchase = $('.purchases #new_purchase').clone(true);
$('.purchases #new_purchase').remove().removeAttr('id');
$("input#add_purchase").autocomplete({
serviceUrl:'ajax/add_order_product.php',
minChars:0,
noCache: false,
onSelect:
function(value, data){
new_item = new_purchase.clone().appendTo('.purchases');
new_item.removeAttr('id');
new_item.find('a.purchase_name').html(data.name);
new_item.find('a.purchase_name').attr('href', 'index.php?module=ProductAdmin&id='+data.id);
// Добавляем варианты нового товара
var variants_select = new_item.find('select[name*=purchases][name*=variant_id]');
for(var i in data.variants)
variants_select.append("<option value='"+data.variants[i].id+"' price='"+data.variants[i].price+"' amount='"+data.variants[i].stock+"'>"+data.variants[i].name+"</option>");
if(data.variants.length>1 || data.variants[0].name != '')
variants_select.show();
variants_select.bind('change', function(){change_variant(variants_select);});
change_variant(variants_select);
if(data.image)
new_item.find('img.product_icon').attr("src", data.image);
else
new_item.find('img.product_icon').remove();
$("input#add_purchase").val('');
new_item.show();
},
fnFormatResult:
function(value, data, currentValue){
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return (data.image?"<img align=absmiddle src='"+data.image+"'> ":'') + value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
// Изменение цены и макс количества при изменении варианта
function change_variant(element)
{
price = element.find('option:selected').attr('price');
amount = element.find('option:selected').attr('amount');
element.closest('.row').find('input[name*=purchases][name*=price]').val(price);
//
amount_select = element.closest('.row').find('select[name*=purchases][name*=amount]');
selected_amount = amount_select.val();
amount_select.html('');
for(i=1; i<=amount; i++)
amount_select.append("<option value='"+i+"'>"+i+" {/literal}{$settings->units}{literal}</option>");
amount_select.val(Math.min(selected_amount, amount));
return false;
}
// Редактировать покупки
$("a.edit_purchases").click( function() {
$(".purchases span.view_purchase").hide();
$(".purchases span.edit_purchase").show();
$(".edit_purchases").hide();
$("div#add_purchase").show();
return false;
});
// Редактировать получателя
$("div#order_details a.edit_order_details").click(function() {
$("ul.order_details .view_order_detail").hide();
$("ul.order_details .edit_order_detail").show();
return false;
});
// Редактировать примечание
$("div#order_details a.edit_note").click(function() {
$("div.view_note").hide();
$("div.edit_note").show();
return false;
});
// Редактировать пользователя
$("div#order_details a.edit_user").click(function() {
$("div.view_user").hide();
$("div.edit_user").show();
return false;
});
$("input#user").autocomplete({
serviceUrl:'ajax/search_users.php',
minChars:0,
noCache: false,
onSelect:
function(value, data){
$('input[name="user_id"]').val(data.id);
}
});
// Удалить пользователя
$("div#order_details a.delete_user").click(function() {
$('input[name="user_id"]').val(0);
$('div.view_user').hide();
$('div.edit_user').hide();
return false;
});
// Посмотреть адрес на карте
$("a#address_link").attr('href', 'http://maps.yandex.ru/?text='+$('#order_details textarea[name="address"]').val());
// Подтверждение удаления
$('select[name*=purchases][name*=variant_id]').bind('change', function(){change_variant($(this));});
$("input[name='status_deleted']").click(function() {
if(!confirm('Подтвердите удаление'))
return false;
});
});
</script>
<style>
.ui-autocomplete{
background-color: #ffffff; width: 100px; overflow: hidden;
border: 1px solid #e0e0e0;
padding: 5px;
}
.ui-autocomplete li.ui-menu-item{
overflow: hidden;
white-space:nowrap;
display: block;
}
.ui-autocomplete a.ui-corner-all{
overflow: hidden;
white-space:nowrap;
display: block;
}
</style>
{/literal}

View File

@@ -0,0 +1,265 @@
<!DOCTYPE html>
{*
Печать заказа
*}
{$wrapper='' scope=parent}
<html>
<head>
<base href="{$config->root_url}/"/>
<title>Заказ №{$order->id}</title>
{* Метатеги *}
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="description" content="{$meta_description|escape}" />
<style>
body {
width: 1000px;
height: 1414px;
/* to centre page on screen*/
margin-left: auto;
margin-right: auto;
//border: 1px solid black;
font-family: Trebuchet MS, times, arial, sans-serif;
font-size: 10pt;
color: black;
background-color: white;
}
div#header{
margin-left: 50px;
margin-top: 50px;
height: 150px;
width: 500px;
float: left;
}
div#company{
margin-right: 50px;
margin-top: 50px;
height: 150px;
width: 400px;
float: right;
text-align: right;
}
div#customer{
margin-right: 50px;
height: 200px;
width: 300px;
float: right;
}
div#customer table{
margin-bottom: 20px;
font-size: 20px;
}
div#map{
margin-left: 50px;
height: 400px;
width: 500px;
float: left;
}
div#purchases{
margin-left: 50px;
margin-bottom: 20px;
min-height: 600px;
width: 100%;
float: left;
}
div#purchases table{
width: 900px;
border-collapse:collapse
}
div#purchases table th
{
font-weight: normal;
text-align: left;
font-size: 25px;
}
div#purchases td, div#purchases th
{
font-size: 18px;
padding-top: 10px;
padding-bottom: 10px;
margin: 0;
}
div#purchases td
{
border-top: 1px solid black;
}
div#total{
float: right;
margin-right: 50px;
height: 100px;
width: 500px;
text-align: right;
}
div#total table{
width: 500px;
float: right;
border-collapse:collapse
}
div#total th
{
font-weight: normal;
text-align: left;
font-size: 22px;
border-top: 1px solid black;
}
div#total td
{
text-align: right;
border-top: 1px solid black;
font-size: 18px;
padding-top: 10px;
padding-bottom: 10px;
margin: 0;
}
div#total .total
{
font-size: 30px;
}
h1{
margin: 0;
font-weight: normal;
font-size: 40px;
}
h2{
margin: 0;
font-weight: normal;
font-size: 24px;
}
p
{
margin: 0;
font-size: 20px;
}
div#purchases td.align_right, div#purchases th.align_right
{
text-align: right;
}
</style>
</head>
<body _onload="window.print();">
<div id="header">
<h1>Заказ №{$order->id}</h1>
<p>от {$order->date|date}</p>
</div>
<div id="company">
<h2>{$settings->site_name}</h2>
<p>{$config->root_url}</p>
</div>
<div id="customer">
<h2>Получатель</h2>
<table>
<tr>
<td>{$order->name|escape} {$order->name2|escape}</td>
</tr>
<tr>
<td>{$order->phone|escape}</td>
</tr>
<tr>
<td>{$order->email|escape}</td>
</tr>
<tr>
<td>
{$order->country|escape}, {$order->region|escape}, {$order->city|escape}, {$order->address|escape}, {$order->index|escape}
</td>
</tr>
<tr>
<td><i>{$order->comment|escape|nl2br}</i></td>
</tr>
</table>
{*
{if $order->note}
<table>
<tr>
<td><h2><i>Примечание менеджера</i></h2><i>{$order->note|escape|nl2br}</i></td>
</tr>
</table>
{/if}
*}
</div>
<div id="map">
<iframe width="550" height="370" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?ie=UTF8&iwloc=near&hl=ru&t=m&z=16&mrt=loc&geocode=&q={$order->address|escape|urlencode}&output=embed"></iframe>
</div>
<div id="purchases">
<table>
<tr>
<th>Товар</th>
<th class="align_right">Цена</th>
<th class="align_right">Количество</th>
<th class="align_right">Всего</th>
</tr>
{foreach from=$purchases item=purchase}
<tr>
<td>
<span class=view_purchase>
{$purchase->product_name} {$purchase->variant_name} {if $purchase->sku} (артикул {$purchase->sku}){/if}
</span>
</td>
<td class="align_right">
<span class=view_purchase>{$purchase->price}</span> {$currency->sign}
</td>
<td class="align_right">
<span class=view_purchase>
{$purchase->amount} {$settings->units}
</span>
</td>
<td class="align_right">
<span class=view_purchase>{$purchase->price*$purchase->amount}</span> {$currency->sign}
</td>
</tr>
{/foreach}
{* Если стоимость доставки входит в сумму заказа *}
{if $order->delivery_price>0}
<tr>
<td colspan=3>{$delivery->name|escape}{if $order->separate_delivery} (оплачивается отдельно){/if}</td>
<td class="align_right">{$order->delivery_price|convert}&nbsp;{$currency->sign}</td>
</tr>
{/if}
</table>
</div>
<div id="total">
<table>
{if $order->discount>0}
<tr>
<th>Скидка</th>
<td>{$order->discount} %</td>
</tr>
{/if}
{if $order->coupon_discount>0}
<tr>
<th>Купон{if $order->coupon_code} ({$order->coupon_code}){/if}</th>
<td>{$order->coupon_discount}&nbsp;{$currency->sign}</td>
</tr>
{/if}
<tr>
<th>Итого</th>
<td class="total">{$order->total_price}&nbsp;{$currency->sign}</td>
</tr>
{if $payment_method}
<tr>
<td colspan="2">Способ оплаты: {$payment_method->name}</td>
</tr>
<tr>
<th>К оплате</th>
<td class="total">{$order->total_price|convert:$payment_method->currency_id}&nbsp;{$payment_currency->sign}</td>
</tr>
{/if}
</table>
</div>
</body>
</html>

View File

@@ -0,0 +1,211 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('orders', $manager->permissions)}
<li {if $status===0}class="active"{/if}><a href="{url module=OrdersAdmin status=0 keyword=null id=null page=null label=null}">Новые</a></li>
<li {if $status==1}class="active"{/if}><a href="{url module=OrdersAdmin status=1 keyword=null id=null page=null label=null}">Приняты</a></li>
<li {if $status==2}class="active"{/if}><a href="{url module=OrdersAdmin status=2 keyword=null id=null page=null label=null}">Выполнены</a></li>
<li {if $status==3}class="active"{/if}><a href="{url module=OrdersAdmin status=3 keyword=null id=null page=null label=null}">Удалены</a></li>
<li {if $status==999}class="active"{/if}><a href="{url module=PreordersAdmin status=999 keyword=null id=null page=null label=null}">Потеряны</a></li>
{if $keyword}
<li class="active"><a href="{url module=OrdersAdmin keyword=$keyword id=null label=null}">Поиск</a></li>
{/if}
{/if}
{if in_array('labels', $manager->permissions)}
<li><a href="{url module=OrdersLabelsAdmin keyword=null id=null page=null label=null}">Метки</a></li>
{/if}
{/capture}
{* Title *}
{$meta_title='Заказы' scope=parent}
{* Поиск *}
<form method="get">
<div id="search">
<input type="hidden" name="module" value="OrdersAdmin">
<input class="search" type="text" name="keyword" value="{$keyword|escape}"/>
<input class="search_button" type="submit" value=""/>
</div>
</form>
{* Заголовок *}
<div id="header">
<h1>{if $orders_count}{$orders_count}{else}Нет{/if} заказ{$orders_count|plural:'':'ов':'а'}</h1>
<a class="add" href="{url module=OrderAdmin}">Добавить заказ</a>
</div>
{if $orders}
<div id="main_list">
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
<form id="form_list" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $orders as $order}
<div class="{if $order->paid}green{/if} row">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$order->id}"/>
</div>
<div class="order_date cell">
{$order->date|date} в {$order->date|time}
</div>
<div class="order_name cell">
{foreach $order->labels as $l}
<span class="order_label" style="background-color:#{$l->color};" title="{$l->name}"></span>
{/foreach}
{if $status != 999}
<a href="{url module=OrderAdmin id=$order->id return=$smarty.server.REQUEST_URI}">Заказ №{$order->id}</a> {$order->name|escape}
{else}
<a href="{url module=PreorderAdmin id=$order->id return=$smarty.server.REQUEST_URI}">Заказ №{$order->id}</a> {$order->name|escape}
{/if}
{if $order->note}
<div class="note">{$order->note|escape}</div>
{/if}
</div>
<div class="icons cell">
<a href='{url module=OrderAdmin id=$order->id view=print}' target="_blank" class="print" title="Печать заказа"></a>
<a href='#' class=delete title="Удалить"></a>
</div>
<div class="name cell" style='white-space:nowrap;'>
{$order->total_price|escape} {$currency->sign}
</div>
<div class="icons cell">
{if $order->paid}
<img src='design/images/cash_stack.png' alt='Оплачен' title='Оплачен'>
{else}
<img src='design/images/cash_stack_gray.png' alt='Не оплачен' title='Не оплачен'>
{/if}
</div>
{if $keyword}
<div class="icons cell">
{if $order->status == 0}
<img src='design/images/new.png' alt='Новый' title='Новый'>
{/if}
{if $order->status == 1}
<img src='design/images/time.png' alt='Принят' title='Принят'>
{/if}
{if $order->status == 2}
<img src='design/images/tick.png' alt='Выполнен' title='Выполнен'>
{/if}
{if $order->status == 3}
<img src='design/images/cross.png' alt='Удалён' title='Удалён'>
{/if}
</div>
{/if}
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id='check_all' class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
{foreach $labels as $l}
<option value="set_label_{$l->id}">Отметить &laquo;{$l->name}&raquo;</option>
{/foreach}
{foreach $labels as $l}
<option value="unset_label_{$l->id}">Снять &laquo;{$l->name}&raquo;</option>
{/foreach}
<option value="delete">Удалить выбранные заказы</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
</div>
{/if}
<!-- Меню -->
<div id="right_menu">
{if $labels}
<!-- Метки -->
<ul id="labels">
<li {if !$label}class="selected"{/if}><span class="label"></span> <a href="{url label=null}">Все заказы</a></li>
{foreach $labels as $l}
<li data-label-id="{$l->id}" {if $label->id==$l->id}class="selected"{/if}>
<span style="background-color:#{$l->color};" class="order_label"></span>
<a href="{url label=$l->id}">{$l->name}</a></li>
{/foreach}
</ul>
<!-- Метки -->
{/if}
</div>
<!-- Меню (The End) -->
{* On document load *}
{literal}
<script>
$(function() {
// Сортировка списка
$("#labels").sortable({
items: "li",
tolerance: "pointer",
scrollSensitivity: 40,
opacity: 0.7
});
$("#main_list #list .row").droppable({
activeClass: "drop_active",
hoverClass: "drop_hover",
tolerance: "pointer",
drop: function(event, ui){
label_id = $(ui.helper).attr('data-label-id');
$(this).find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=set_label_'+label_id+']').attr("selected", "selected");
$(this).closest("form").submit();
return false;
}
});
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтверждение удаления
$("form").submit(function() {
if($('#list input[type="checkbox"][name*="check"]:checked').length>0)
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,82 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('orders', $manager->permissions)}
<li {if $status===0}class="active"{/if}><a href="{url module=OrdersAdmin status=0 keyword=null id=null page=null label=null}">Новые</a></li>
<li {if $status==1}class="active"{/if}><a href="{url module=OrdersAdmin status=1 keyword=null id=null page=null label=null}">Приняты</a></li>
<li {if $status==2}class="active"{/if}><a href="{url module=OrdersAdmin status=2 keyword=null id=null page=null label=null}">Выполнены</a></li>
<li {if $status==3}class="active"{/if}><a href="{url module=OrdersAdmin status=3 keyword=null id=null page=null label=null}">Удалены</a></li>
{if $keyword}
<li class="active"><a href="{url module=OrdersAdmin keyword=$keyword id=null label=null}">Поиск</a></li>
{/if}
{/if}
<li class="active"><a href="{url module=OrdersLabelsAdmin keyword=null id=null page=null label=null}">Метки</a></li>
{/capture}
{if $label->id}
{$meta_title = $label->name scope=parent}
{else}
{$meta_title = 'Новая метка' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<link rel="stylesheet" media="screen" type="text/css" href="design/js/colorpicker/css/colorpicker.css" />
<script type="text/javascript" src="design/js/colorpicker/js/colorpicker.js"></script>
<script>
$(function() {
$('#color_icon, #color_link').ColorPicker({
color: $('#color_input').val(),
onShow: function (colpkr) {
$(colpkr).fadeIn(500);
return false;
},
onHide: function (colpkr) {
$(colpkr).fadeOut(500);
return false;
},
onChange: function (hsb, hex, rgb) {
$('#color_icon').css('backgroundColor', '#' + hex);
$('#color_input').val(hex);
$('#color_input').ColorPickerHide();
}
});
});
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success == 'added'}Метка добавлена{elseif $message_success == 'updated'}Метка обновлена{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name="name" type="text" value="{$label->name|escape}"/>
<input name=id type="hidden" value="{$label->id|escape}"/>
<div class="checkbox">
<span id="color_icon" style="background-color:#{$label->color};" class="order_label_big"></span>
<input id="color_input" name="color" class="simpla_inp" type="hidden" value="{$label->color|escape}" />
</div>
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</div>
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,152 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('orders', $manager->permissions)}
<li {if $status===0}class="active"{/if}><a href="{url module=OrdersAdmin status=0 keyword=null id=null page=null label=null}">Новые</a></li>
<li {if $status==1}class="active"{/if}><a href="{url module=OrdersAdmin status=1 keyword=null id=null page=null label=null}">Приняты</a></li>
<li {if $status==2}class="active"{/if}><a href="{url module=OrdersAdmin status=2 keyword=null id=null page=null label=null}">Выполнены</a></li>
<li {if $status==3}class="active"{/if}><a href="{url module=OrdersAdmin status=3 keyword=null id=null page=null label=null}">Удалены</a></li>
{if $keyword}
<li class="active"><a href="{url module=OrdersAdmin keyword=$keyword id=null label=null}">Поиск</a></li>
{/if}
{/if}
<li class="active"><a href="{url module=OrdersLabelsAdmin keyword=null id=null page=null label=null}">Метки</a></li>
{/capture}
{* Title *}
{$meta_title='Метки заказов' scope=parent}
{* Заголовок *}
<div id="header">
<h1>{if $labels}Метки заказов{else}Нет меток{/if}</h1>
<a class="add" href="{url module=OrdersLabelAdmin}">Новая метка</a>
</div>
{if $labels}
<div id="main_list">
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $labels as $label}
<div class="row">
<input type="hidden" name="positions[{$label->id}]" value="{$label->position}">
<div class="move cell"><div class="move_zone"></div></div>
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$label->id}" />
</div>
<div class="name cell">
<span style="background-color:#{$label->color};" class="order_label"></span>
<a href="{url module=OrdersLabelAdmin id=$label->id return=$smarty.server.REQUEST_URI}">{$label->name|escape}</a>
</div>
<div class="icons cell">
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
</div>
{else}
Нет меток
{/if}
{* On document load *}
{literal}
<script>
$(function() {
// Сортировка списка
$("#list").sortable({
items: ".row",
tolerance: "pointer",
handle: ".move_zone",
scrollSensitivity: 40,
opacity: 0.7,
forcePlaceholderSize: true,
axis: 'y',
helper: function(event, ui){
if($('input[type="checkbox"][name*="check"]:checked').size()<1) return ui;
var helper = $('<div/>');
$('input[type="checkbox"][name*="check"]:checked').each(function(){
var item = $(this).closest('.row');
helper.height(helper.height()+item.innerHeight());
if(item[0]!=ui[0]) {
helper.append(item.clone());
$(this).closest('.row').remove();
}
else {
helper.append(ui.clone());
item.find('input[type="checkbox"][name*="check"]').attr('checked', false);
}
});
return helper;
},
start: function(event, ui) {
if(ui.helper.children('.row').size()>0)
$('.ui-sortable-placeholder').height(ui.helper.height());
},
beforeStop:function(event, ui){
if(ui.helper.children('.row').size()>0){
ui.helper.children('.row').each(function(){
$(this).insertBefore(ui.item);
});
ui.item.remove();
}
},
update:function(event, ui)
{
$("#list_form input[name*='check']").attr('checked', false);
$("#list_form").ajaxSubmit(function() {
colorize();
});
}
});
// Раскраска строк
function colorize()
{
$(".row:even").addClass('even');
$(".row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить
$("a.delete").click(function() {
$('#list_form input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтверждение удаления
$("form").submit(function() {
if($('#list input[type="checkbox"][name*="check"]:checked').length>0)
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

495
simpla/design/html/page.tpl Normal file
View File

@@ -0,0 +1,495 @@
{capture name=tabs}
{if in_array('pages', $manager->permissions)}
{foreach from=$menus item=m}
{if $m->id != 3}
<li {if $m->id == $menu->id}class="active"{/if}><a href='index.php?module=PagesAdmin&menu_id={$m->id}'>{$m->name}</a></li>
{/if}
{/foreach}
{/if}
{/capture}
{if $page->id}
{$meta_title = $page->name scope=parent}
{else}
{$meta_title = 'Новая страница' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<script src="design/js/jquery/datepicker/jquery.ui.datepicker-ru.js"></script>
<script src="design/js/autocomplete/jquery.autocomplete-min.js"></script>
<style>
.autocomplete-w1 {position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; }
.autocomplete { border:1px solid #999; background:#FFF; cursor:default; text-align:left; overflow-x:auto; min-width: 300px; overflow-y: auto; margin:-6px 6px 6px -6px; /* IE6 specific: */ _height:350px; _margin:0; _overflow-x:hidden; }
.autocomplete .selected { background:#F0F0F0; }
.autocomplete div { padding:2px 5px; white-space:nowrap; }
.autocomplete strong { font-weight:normal; color:#3399FF; }
</style>
<script>
$(function() {
// Удаление связанного товара
$(".related_products a.delete").live('click', function() {
$(this).closest("div.row").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Добавление связанного товара
var new_related_product = $('#new_related_product').clone(true);
$('#new_related_product').remove().removeAttr('id');
$("input#related_products").autocomplete({
serviceUrl:'ajax/search_products.php',
minChars:0,
noCache: false,
onSelect:
function(value, data){
new_item = new_related_product.clone().appendTo('.related_products');
new_item.removeAttr('id');
new_item.find('a.related_product_name').html(data.name);
new_item.find('a.related_product_name').attr('href', 'index.php?module=ProductAdmin&id='+data.id);
new_item.find('input[name*="related_products"]').val(data.id);
$("#related_products").val('');
new_item.show();
},
fnFormatResult:
function(value, data, currentValue){
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
// Удаление связанноq статьи
$(".related_pages a.delete").live('click', function() {
$(this).closest("div.row").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Добавление связанной статьи
var new_related_page = $('#new_related_page').clone(true);
$('#new_related_page').remove().removeAttr('id');
$("input#related_pages").autocomplete({
serviceUrl:'ajax/search_pages.php',
minChars:0,
noCache: false,
onSelect:
function(value, data){
new_item = new_related_page.clone().appendTo('.related_pages');
new_item.removeAttr('id');
new_item.find('a.related_page_name').html(data.name);
new_item.find('a.related_page_name').attr('href', 'index.php?module=pageAdmin&id='+data.id);
new_item.find('input[name*="related_pages"]').val(data.id);
$("#related_pages").val('');
new_item.show();
},
fnFormatResult:
function(value, data, currentValue){
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
// Удаление связанноq статьи
$(".related_articles a.delete").live('click', function() {
$(this).closest("div.row").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Добавление связанной статьи
var new_related_article = $('#new_related_article').clone(true);
$('#new_related_article').remove().removeAttr('id');
$("input#related_articles").autocomplete({
serviceUrl:'ajax/search_articles.php',
minChars:0,
noCache: false,
onSelect:
function(value, data){
new_item = new_related_article.clone().appendTo('.related_articles');
new_item.removeAttr('id');
new_item.find('a.related_article_name').html(data.name);
new_item.find('a.related_article_name').attr('href', 'index.php?module=articleAdmin&id='+data.id);
new_item.find('input[name*="related_articles"]').val(data.id);
$("#related_articles").val('');
new_item.show();
},
fnFormatResult:
function(value, data, currentValue){
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
$(".images a.delete").click( function() {
$("input[name='delete_image']").val('1');
$(this).closest("ul").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Автозаполнение мета-тегов
menu_item_name_touched = true;
meta_title_touched = true;
meta_keywords_touched = true;
meta_description_touched = true;
url_touched = true;
if($('input[name="menu_item_name"]').val() == generate_menu_item_name() || $('input[name="name"]').val() == '')
menu_item_name_touched = false;
if($('input[name="meta_title"]').val() == generate_meta_title() || $('input[name="meta_title"]').val() == '')
meta_title_touched = false;
if($('input[name="meta_keywords"]').val() == generate_meta_keywords() || $('input[name="meta_keywords"]').val() == '')
meta_keywords_touched = false;
if($('textarea[name="meta_description"]').val() == generate_meta_description() || $('textarea[name="meta_description"]').val() == '')
meta_description_touched = false;
if($('input[name="url"]').val() == generate_url())
url_touched = false;
$('input[name="name"]').change(function() { menu_item_name_touched = true; });
$('input[name="meta_title"]').change(function() { meta_title_touched = true; });
$('input[name="meta_keywords"]').change(function() { meta_keywords_touched = true; });
$('textarea[name="meta_description"]').change(function() { meta_description_touched = true; });
$('input[name="url"]').change(function() { url_touched = true; });
if($('input[name="name"]').val() == ''){
$('input[name="header"]').keyup(function() {
set_meta();
});
}
});
function set_meta()
{
/* MODIFICATION /15.04.2016/ coder:SP отключено автозаполнение титла и кейворда */
if(!menu_item_name_touched)
$('input[name="name"]').val(generate_menu_item_name());
if(!meta_title_touched)
/* $('input[name="meta_title"]').val(generate_meta_title());*/
if(!meta_keywords_touched)
/* $('input[name="meta_keywords"]').val(generate_meta_keywords()); */
if(!meta_description_touched)
{
descr = $('textarea[name="meta_description"]');
descr.val(generate_meta_description());
descr.scrollTop(descr.outerHeight());
}
if(!url_touched)
$('input[name="url"]').val(generate_url());
}
function generate_menu_item_name()
{
name = $('input[name="header"]').val();
return name;
}
function generate_meta_title()
{
name = $('input[name="header"]').val();
return name;
}
function generate_meta_keywords()
{
name = $('input[name="header"]').val();
return name;
}
function generate_meta_description()
{
/* if(typeof(tinyMCE.get("body")) =='object')
{
description = tinyMCE.get("body").getContent().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
return description;
}
else
return $('textarea[name=body]').val().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
*/
}
function generate_url()
{
url = $('input[name="header"]').val();
url = url.replace(/[\s]+/gi, '-');
url = translit(url);
url = url.replace(/[^0-9a-z_\-]+/gi, '').toLowerCase();
return url;
}
function translit(str)
{
var ru=("А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я").split("-")
var en=("A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch-'-'-Y-y-'-'-E-e-YU-yu-YA-ya").split("-")
var res = '';
for(var i=0, l=str.length; i<l; i++)
{
var s = str.charAt(i), n = ru.indexOf(s);
if(n >= 0) { res += en[n]; }
else { res += s; }
}
return res;
}
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success == 'added'}Страница добавлена{elseif $message_success == 'updated'}Страница обновлена{/if}</span>
<a class="link" target="_blank" href="../{$page->url}">Открыть страницу на сайте</a>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error == 'url_exists'}Страница с таким адресом уже существует{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=header type="text" value="{$page->header|escape}"/>
<input name=id type="hidden" value="{$page->id|escape}"/>
<div class="checkbox">
<input name="visible" value='1' type="checkbox" id="active_checkbox" {if $page->visible}checked{/if}/> <label for="active_checkbox">Активна</label>
</div>
{if $page->menu_id == 3}
<div class="checkbox">
<input name="show_home" value='1' type="checkbox" id="home_checkbox" {if $page->show_home}checked{/if}/> <label for="home_checkbox">На главной</label>
</div>
<div class="checkbox">
<input name="show_service" value='1' type="checkbox" id="home_checkbox" {if $page->show_service}checked{/if}/> <label for="home_checkbox">В услугах</label>
</div>
{/if}
</div>
<!-- Параметры страницы -->
<div class="block">
<ul>
<li><label class=property>Название пункта в меню</label><input name="name" class="simpla_inp" type="text" value="{$page->name|escape}" /></li>
<li><label class=property>Меню</label>
<select name="menu_id">
{foreach from=$menus item=m}
<option value='{$m->id}' {if $page->menu_id == $m->id}selected{/if}>{$m->name|escape}</option>
{/foreach}
</select>
</li>
{if $page->menu_id == 3}
<li><label class=property>Родительский раздел</label>
<select name="parent">
<option value='28'>Верхний уровень</option>
{foreach from=$select_items item=select_item}
<option value='{$select_item->id}' {if $page->parent == $select_item->id}selected{/if}>{$select_item->name|escape}</option>
{/foreach}
</select>
</li>
{/if}
</ul>
</div>
<!-- Параметры страницы (The End)-->
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block layer">
<h2>Параметры страницы</h2>
<ul>
<li><label class=property>Адрес</label><div class="page_url">/</div><input name="url" class="page_url" type="text" value="{$page->url|escape}" /></li>
<li><label class=property>Заголовок</label><input name="meta_title" class="simpla_inp" type="text" value="{$page->meta_title|escape}" /></li>
<li><label class=property>Ключевые слова</label><input name="meta_keywords" class="simpla_inp" type="text" value="{$page->meta_keywords|escape}" /></li>
<li><label class=property>Описание</label><textarea name="meta_description" class="simpla_inp"/>{$page->meta_description|escape}</textarea></li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<!-- Изображение категории -->
<div class="block layer images">
<h2>Изображение</h2>
<input class='upload_image' name=image type=file>
<input type=hidden name="delete_image" value="">
{if $page->image}
<ul>
<li>
<a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a>
<img src="{$page->image|resizepage:100:100}" alt="" />
</li>
</ul>
{/if}
</div>
{if $page->menu_id == 3}
<div class="block">
<h2>Связанные товары <small>(Хиты продаж)</small></h2>
<div id=list class="related_products">
{foreach from=$related_products item=related_product}
<div class="row">
<div class="name cell">
<input type=hidden name=related_products[] value='{$related_product->id}'>
<a href="/simpla/index.php?module=ProductAdmin&id={$related_product->id}">{$related_product->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_product" class="row" style='display:none;'>
<div class="name cell">
<input type=hidden name=related_products[] value=''>
<a class="related_product_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name=related id='related_products' class="input_autocomplete" placeholder='Выберите товар чтобы добавить его'>
</div>
<div class="block layer">
<h2>Связанные страницы (Другие услуги)</h2>
<div id=list class="related_pages">
{foreach from=$related_pages item=related_page}
<div class="row">
<div class="name cell">
<input type=hidden name=related_pages[] value='{$related_page->id}'>
<a href="{url id=$related_page->id}">{$related_page->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_page" class="row" style='display:none;'>
<div class="name cell">
<input type=hidden name=related_pages[] value=''>
<a class="related_page_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name=related id='related_pages' class="input_autocomplete" placeholder='Выберите статью чтобы добавить ее'>
</div>
<div class="block layer">
<h2>Связанные страницы (Примеры работ)</h2>
<div id=list class="related_articles">
{foreach from=$related_articles item=related_page}
<div class="row">
<div class="name cell">
<input type=hidden name=related_articles[] value='{$related_page->id}'>
<a href="/simpla/index.php?module=ArticleAdmin&id={$related_page->id}">{$related_page->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_article" class="row" style='display:none;'>
<div class="name cell">
<input type=hidden name=related_articles[] value=''>
<a class="related_article_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name=related id='related_articles' class="input_autocomplete" placeholder='Выберите статью чтобы добавить ее'>
</div>
<div class="block layer">
<ul>
<li>
<label style="float:none;" class=property>Ссылка на все работы</label>
<input style="width:90%" name="works_url" type="text" value="{$page->works_url}" />
</li>
<li>
<label style="float:none;" class=property>Текст ссылки</label>
<input style="width:90%" name="works_url_text" class="simpla_inp" type="text" value="{$page->works_url_text|escape}" />
</li>
</ul>
</div>
{/if}
</div>
<!-- Правая колонка свойств товара (The End)-->
<!-- Параметры страницы -->
<div class="block layer">
<h2>Краткое содержание</h2>
<textarea name="introtext" style="width: 100%; height: 100px;" id="_introtext">{$page->introtext|escape}</textarea>
</div>
<!-- Параметры страницы (The End)-->
<!-- Параметры страницы -->
<div class="block layer">
<h2>Текст перед текстом страницы</h2>
<textarea name="toptext" class="editor_large" id="_toptext">{$page->toptext|escape}</textarea>
</div>
<!-- Параметры страницы (The End)-->
<!-- Описагние товара -->
<div class="block layer">
<h2>Текст страницы</h2>
<textarea name="body" id="_body" class="editor_large">{$page->body|escape}</textarea>
</div>
<!-- Описание товара (The End)-->
<!-- Параметры страницы -->
<div class="block layer">
<h2>Текст после текста страницы</h2>
<textarea name="bottext" class="editor_large" id="_bottext">{$page->bottext|escape}</textarea>
</div>
<!-- Параметры страницы (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,175 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('pages', $manager->permissions)}
{foreach from=$menus item=m}
{if $m->id != 3}
<li {if $m->id == $menu->id}class="active"{/if}><a href="{url module=PagesAdmin menu_id=$m->id}">{$m->name}</a></li>
{/if}
{/foreach}
{/if}
{/capture}
{* Title *}
{$meta_title = {$menu->name} scope=parent}
{* Заголовок *}
<div id="header">
<h1>{$menu->name}</h1>
<a class="add" href="{url module=PageAdmin}">Добавить страницу</a>
</div>
{if $pages}
<div id="main_list">
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $pages as $page}
<div class="{if !$page->visible}invisible{/if} row">
<input type="hidden" name="positions[{$page->id}]" value="{$page->position}">
<div class="move cell"><div class="move_zone"></div></div>
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$page->id}" />
</div>
<div class="name cell">
<a href="{url module=PageAdmin id=$page->id return=$smarty.server.REQUEST_URI}">{$page->header|escape}</a>
</div>
<div class="icons cell">
<a class="preview" title="Предпросмотр в новом окне" href="{$page->parentUrl}{$page->url}/" target="_blank"></a>
<a class="enable" title="Активна" href="#"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="enable">Сделать видимыми</option>
<option value="disable">Сделать невидимыми</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
</div>
{else}
Нет страниц
{/if}
{* On document load *}
{literal}
<script>
$(function() {
// Сортировка списка
$("#list").sortable({
items: ".row",
tolerance: "pointer",
handle: ".move_zone",
scrollSensitivity: 40,
opacity: 0.7,
forcePlaceholderSize: true,
axis: 'y',
helper: function(event, ui){
if($('input[type="checkbox"][name*="check"]:checked').size()<1) return ui;
var helper = $('<div/>');
$('input[type="checkbox"][name*="check"]:checked').each(function(){
var item = $(this).closest('.row');
helper.height(helper.height()+item.innerHeight());
if(item[0]!=ui[0]) {
helper.append(item.clone());
$(this).closest('.row').remove();
}
else {
helper.append(ui.clone());
item.find('input[type="checkbox"][name*="check"]').attr('checked', false);
}
});
return helper;
},
start: function(event, ui) {
if(ui.helper.children('.row').size()>0)
$('.ui-sortable-placeholder').height(ui.helper.height());
},
beforeStop:function(event, ui){
if(ui.helper.children('.row').size()>0){
ui.helper.children('.row').each(function(){
$(this).insertBefore(ui.item);
});
ui.item.remove();
}
},
update:function(event, ui)
{
$("#list_form input[name*='check']").attr('checked', false);
$("#list_form").ajaxSubmit(function() {
colorize();
});
}
});
// Раскраска строк
function colorize()
{
$(".row:even").addClass('even');
$(".row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить
$("a.delete").click(function() {
$('#list_form input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Показать
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'page', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
$("form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,53 @@
{if $pages_count>1}
{* Скрипт для листания через ctrl → *}
{* Ссылки на соседние страницы должны иметь id PrevLink и NextLink *}
<script type="text/javascript" src="design/js/ctrlnavigate.js"></script>
<!-- Листалка страниц -->
<div id="pagination">
{* Количество выводимых ссылок на страницы *}
{$visible_pages = 11}
{* По умолчанию начинаем вывод со страницы 1 *}
{$page_from = 1}
{* Если выбранная пользователем страница дальше середины "окна" - начинаем вывод уже не с первой *}
{if $current_page > floor($visible_pages/2)}
{$page_from = max(1, $current_page-floor($visible_pages/2)-1)}
{/if}
{* Если выбранная пользователем страница близка к концу навигации - начинаем с "конца-окно" *}
{if $current_page > $pages_count-ceil($visible_pages/2)}
{$page_from = max(1, $pages_count-$visible_pages-1)}
{/if}
{* До какой страницы выводить - выводим всё окно, но не более ощего количества страниц *}
{$page_to = min($page_from+$visible_pages, $pages_count-1)}
{* Ссылка на 1 страницу отображается всегда *}
<a class="{if $current_page==1}selected{else}droppable{/if}" href="{url page=1}">1</a>
{* Выводим страницы нашего "окна" *}
{section name=pages loop=$page_to start=$page_from}
{* Номер текущей выводимой страницы *}
{$p = $smarty.section.pages.index+1}
{* Для крайних страниц "окна" выводим троеточие, если окно не возле границы навигации *}
{if ($p == $page_from+1 && $p!=2) || ($p == $page_to && $p != $pages_count-1)}
<a class="{if $p==$current_page}selected{/if}" href="{url page=$p}">...</a>
{else}
<a class="{if $p==$current_page}selected{else}droppable{/if}" href="{url page=$p}">{$p}</a>
{/if}
{/section}
{* Ссылка на последнююю страницу отображается всегда *}
<a class="{if $current_page==$pages_count}selected{else}droppable{/if}" href="{url page=$pages_count}">{$pages_count}</a>
<a href="{url page=all}">все сразу</a>
{if $current_page>1}<a id="PrevLink" href="{url page=$current_page-1}">←назад</a>{/if}
{if $current_page<$pages_count}<a id="NextLink" href="{url page=$current_page+1}">вперед→</a>{/if}
</div>
<!-- Листалка страниц (The End) -->
{/if}

View File

@@ -0,0 +1,155 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('settings', $manager->permissions)}<li><a href="index.php?module=SettingsAdmin">Настройки</a></li>{/if}
{if in_array('currency', $manager->permissions)}<li><a href="index.php?module=CurrencyAdmin">Валюты</a></li>{/if}
{if in_array('delivery', $manager->permissions)}<li><a href="index.php?module=DeliveriesAdmin">Доставка</a></li>{/if}
<li class="active"><a href="index.php?module=PaymentMethodsAdmin">Оплата</a></li>
{if in_array('managers', $manager->permissions)}<li><a href="index.php?module=ManagersAdmin">Менеджеры</a></li>{/if}
{if in_array('maillist', $manager->permissions)}<li><a href="index.php?module=MailingMethodsAdmin">Рассылка</a></li>{/if}
{/capture}
{if $payment_method->id}
{$meta_title = $payment_method->name scope=parent}
{else}
{$meta_title = 'Новый способ оплаты' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<script src="design/js/jquery/jquery.js"></script>
<script src="design/js/jquery/jquery-ui.min.js"></script>
<script>
$(function() {
$('div#module_settings').filter(':hidden').find("input, select, textarea").attr("disabled", true);
$('select[name=module]').change(function(){
$('div#module_settings').hide().find("input, select, textarea").attr("disabled", true);
$('div#module_settings[module='+$(this).val()+']').show().find("input, select, textarea").attr("disabled", false);
});
});
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{$message_success}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_success == 'added'}Способ оплаты добавлен{elseif $message_success == 'updated'}Способ оплаты изменен{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$payment_method->name|escape}"/>
<input name=id type="hidden" value="{$payment_method->id}"/>
<div class="checkbox">
<input name=enabled value='1' type="checkbox" id="active_checkbox" {if $payment_method->enabled}checked{/if}/> <label for="active_checkbox">Активен</label>
</div>
</div>
<div id="product_categories">
<select name="module">
<option value='null'>Ручная обработка</option>
{foreach $payment_modules as $payment_module}
<option value='{$payment_module@key|escape}' {if $payment_method->module == $payment_module@key}selected{/if} >{$payment_module->name|escape}</option>
{/foreach}
</select>
</div>
<div id="product_brand">
<label>Валюта</label>
<div>
<select name="currency_id">
{foreach $currencies as $currency}
<option value='{$currency->id}' {if $currency->id==$payment_method->currency_id}selected{/if}>{$currency->name|escape}</option>
{/foreach}
</select>
</div>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
{foreach $payment_modules as $payment_module}
<div class="block layer" {if $payment_module@key!=$payment_method->module}style='display:none;'{/if} id=module_settings module='{$payment_module@key}'>
<h2>{$payment_module->name}</h2>
{* Параметры модуля оплаты *}
<ul>
{foreach $payment_module->settings as $setting}
{$variable_name = $setting->variable}
{if $setting->options|@count>1}
<li><label class=property>{$setting->name}</label>
<select name="payment_settings[{$setting->variable}]">
{foreach $setting->options as $option}
<option value='{$option->value}' {if $option->value==$payment_settings[$setting->variable]}selected{/if}>{$option->name|escape}</option>
{/foreach}
</select>
</li>
{elseif $setting->options|@count==1}
{$option = $setting->options|@first}
<li><label class="property" for="{$setting->variable}">{$setting->name|escape}</label><input name="payment_settings[{$setting->variable}]" class="simpla_inp" type="checkbox" value="{$option->value|escape}" {if $option->value==$payment_settings[$setting->variable]}checked{/if} id="{$setting->variable}" /> <label for="{$setting->variable}">{$option->name}</label></li>
{else}
<li><label class="property" for="{$setting->variable}">{$setting->name|escape}</label><input name="payment_settings[{$setting->variable}]" class="simpla_inp" type="text" value="{$payment_settings[$setting->variable]|escape}" id="{$setting->variable}"/></li>
{/if}
{/foreach}
</ul>
{* END Параметры модуля оплаты *}
</div>
{/foreach}
<div class="block layer" {if $payment_method->module != ''}style='display:none;'{/if} id=module_settings module='null'></div>
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка -->
<div id="column_right">
<div class="block layer">
<h2>Возможные способы доставки</h2>
<ul>
{foreach $deliveries as $delivery}
<li>
<input type=checkbox name="payment_deliveries[]" id="delivery_{$delivery->id}" value='{$delivery->id}' {if in_array($delivery->id, $payment_deliveries)}checked{/if}> <label for="delivery_{$delivery->id}">{$delivery->name}</label><br>
</li>
{/foreach}
</ul>
</div>
</div>
<!-- Правая колонка (The End)-->
<!-- Описагние товара -->
<div class="block layer">
<h2>Описание</h2>
<textarea name="description" class="editor_small">{$payment_method->description|escape}</textarea>
</div>
<!-- Описание товара (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,168 @@
{* Вкладки *}
{capture name=tabs}
{if in_array('settings', $manager->permissions)}<li><a href="index.php?module=SettingsAdmin">Настройки</a></li>{/if}
{if in_array('currency', $manager->permissions)}<li><a href="index.php?module=CurrencyAdmin">Валюты</a></li>{/if}
{if in_array('delivery', $manager->permissions)}<li><a href="index.php?module=DeliveriesAdmin">Доставка</a></li>{/if}
<li class="active"><a href="index.php?module=PaymentMethodsAdmin">Оплата</a></li>
{if in_array('managers', $manager->permissions)}<li><a href="index.php?module=ManagersAdmin">Менеджеры</a></li>{/if}
{if in_array('maillist', $manager->permissions)}<li><a href="index.php?module=MailingMethodsAdmin">Рассылка</a></li>{/if}
{/capture}
{* Title *}
{$meta_title='Способы оплаты' scope=parent}
{* Заголовок *}
<div id="header">
<h1>Способы оплаты</h1>
<a class="add" href="{url module=PaymentMethodAdmin}">Добавить способ оплаты</a>
</div>
<div id="main_list">
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $payment_methods as $payment_method}
<div class="{if !$payment_method->enabled}invisible{/if} row">
<input type="hidden" name="positions[{$payment_method->id}]" value="{$payment_method->position}">
<div class="move cell"><div class="move_zone"></div></div>
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$payment_method->id}" />
</div>
<div class="name cell">
<a href="{url module=PaymentMethodAdmin id=$payment_method->id return=$smarty.server.REQUEST_URI}">{$payment_method->name}</a>
</div>
<div class="icons cell">
<a class="enable" title="Активен" href="#"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="enable">Включить</option>
<option value="disable">Выключить</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
</div>
{literal}
<script>
$(function() {
// Сортировка списка
$("#list").sortable({
items: ".row",
tolerance: "pointer",
handle: ".move_zone",
scrollSensitivity: 40,
opacity: 0.7,
forcePlaceholderSize: true,
axis: 'y',
helper: function(event, ui){
if($('input[type="checkbox"][name*="check"]:checked').size()<1) return ui;
var helper = $('<div/>');
$('input[type="checkbox"][name*="check"]:checked').each(function(){
var item = $(this).closest('.row');
helper.height(helper.height()+item.innerHeight());
if(item[0]!=ui[0]) {
helper.append(item.clone());
$(this).closest('.row').remove();
}
else {
helper.append(ui.clone());
item.find('input[type="checkbox"][name*="check"]').attr('checked', false);
}
});
return helper;
},
start: function(event, ui) {
if(ui.helper.children('.row').size()>0)
$('.ui-sortable-placeholder').height(ui.helper.height());
},
beforeStop:function(event, ui){
if(ui.helper.children('.row').size()>0){
ui.helper.children('.row').each(function(){
$(this).insertBefore(ui.item);
});
ui.item.remove();
}
},
update:function(event, ui)
{
$("#list_form input[name*='check']").attr('checked', false);
$("#list_form").ajaxSubmit(function() {
colorize();
});
}
});
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Показать товар
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'payment', 'id': id, 'values': {'enabled': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
$("form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

212
simpla/design/html/post.tpl Normal file
View File

@@ -0,0 +1,212 @@
{capture name=tabs}
<li class="active"><a href="{url module=BlogAdmin id=null page=null}">Блог</a></li>
{/capture}
{if $post->id}
{$meta_title = $post->name scope=parent}
{else}
{$meta_title = 'Новая запись в блоге' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<script src="design/js/jquery/datepicker/jquery.ui.datepicker-ru.js"></script>
<script>
$(function() {
update = {/literal}{if $post->url}true;{else}false;{/if}{literal}
$('input[name="date"]').datepicker({
regional:'ru'
});
// Автозаполнение мета-тегов
meta_title_touched = true;
meta_keywords_touched = true;
meta_description_touched = true;
url_touched = true;
if($('input[name="meta_title"]').val() == generate_meta_title() || $('input[name="meta_title"]').val() == '')
meta_title_touched = false;
if($('input[name="meta_keywords"]').val() == generate_meta_keywords() || $('input[name="meta_keywords"]').val() == '')
meta_keywords_touched = false;
if($('textarea[name="meta_description"]').val() == generate_meta_description() || $('textarea[name="meta_description"]').val() == '')
meta_description_touched = false;
if($('input[name="url"]').val() == generate_url() || $('input[name="url"]').val() == '')
url_touched = false;
$('input[name="meta_title"]').change(function() { meta_title_touched = true; });
$('input[name="meta_keywords"]').change(function() { meta_keywords_touched = true; });
$('textarea[name="meta_description"]').change(function() { meta_description_touched = true; });
$('input[name="url"]').change(function() { url_touched = true; });
$('input[name="name"]').keyup(function() { set_meta(); });
$('select[name="brand_id"]').change(function() { set_meta(); });
$('select[name="categories[]"]').change(function() { set_meta(); });
});
function set_meta()
{
if(!meta_title_touched)
//$('input[name="meta_title"]').val(generate_meta_title());
if(!meta_keywords_touched)
//$('input[name="meta_keywords"]').val(generate_meta_keywords());
if(!meta_description_touched)
{
descr = $('textarea[name="meta_description"]');
descr.val(generate_meta_description());
descr.scrollTop(descr.outerHeight());
}
if(!url_touched && !update)
$('input[name="url"]').val(generate_url());
}
function generate_meta_title()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_keywords()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_description()
{
if(typeof(tinyMCE.get("annotation")) =='object')
{
description = tinyMCE.get("annotation").getContent().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
return description;
}
else
return $('textarea[name=annotation]').val().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
}
function generate_url()
{
url = $('input[name="name"]').val();
url = url.replace(/[\s]+/gi, '-');
url = translit(url);
url = url.replace(/[^0-9a-z_\-]+/gi, '').toLowerCase();
return url;
}
function translit(str)
{
var ru=("А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я").split("-")
var en=("A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch-'-'-Y-y-'-'-E-e-YU-yu-YA-ya").split("-")
var res = '';
for(var i=0, l=str.length; i<l; i++)
{
var s = str.charAt(i), n = ru.indexOf(s);
if(n >= 0) { res += en[n]; }
else { res += s; }
}
return res;
}
</script>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success == 'added'}Запись добавлена{elseif $message_success == 'updated'}Запись обновлена{/if}</span>
<a class="link" target="_blank" href="../blog/{$post->url}">Открыть запись на сайте</a>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error == 'url_exists'}Запись с таким адресом уже существует{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$post->name|escape}"/>
<input name=id type="hidden" value="{$post->id|escape}"/>
<div class="checkbox">
<input name=visible value='1' type="checkbox" id="active_checkbox" {if $post->visible}checked{/if}/> <label for="active_checkbox">Активна</label>
</div>
</div>
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block">
<ul>
<li><label class=property>Дата</label><input type=text name=date value='{$post->date|date}'></li>
</ul>
</div>
<div class="block layer">
<!-- Параметры страницы (The End)-->
<h2>Параметры страницы</h2>
<!-- Параметры страницы -->
<ul>
<li><label class=property>Адрес</label><div class="page_url"> /blog/</div><input name="url" class="page_url" type="text" value="{$post->url|escape}" /></li>
<li><label class=property>Заголовок</label><input name="meta_title" type="text" value="{$post->meta_title|escape}" /></li>
<li><label class=property>Ключевые слова</label><input name="meta_keywords" type="text" value="{$post->meta_keywords|escape}" /></li>
<li><label class=property>Описание</label><textarea name="meta_description" />{$post->meta_description|escape}</textarea></li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<!-- Изображение категории -->
<div class="block layer images">
<h2>Изображение</h2>
<input class='upload_image' name=image type=file>
<input type=hidden name="delete_image" value="">
{if $post->image}
<ul>
<li>
<a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a>
<img src="{$post->image|resizepost:100:100}" alt="" />
</li>
</ul>
{/if}
</div>
</div>
<!-- Правая колонка свойств товара (The End)-->
<!-- Описагние товара -->
<div class="block layer">
<h2>Краткое описание</h2>
<textarea name="annotation" class='editor_small'>{$post->annotation|escape}</textarea>
</div>
<div class="block">
<h2>Полное описание</h2>
<textarea name="body" class='editor_large'>{$post->text|escape}</textarea>
</div>
<!-- Описание товара (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,859 @@
{capture name=tabs}
<li class="active"><a href="{url module=ProductsAdmin category_id=$product->category_id return=null brand_id=null id=null}">Товары</a></li>
{if in_array('categories', $manager->permissions)}<li><a href="index.php?module=CategoriesAdmin">Категории</a></li>{/if}
{if in_array('brands', $manager->permissions)}<li><a href="index.php?module=BrandsAdmin">Бренды</a></li>{/if}
{if in_array('features', $manager->permissions)}<li><a href="index.php?module=FeaturesAdmin">Свойства</a></li>{/if}
{/capture}
{if $product->id}
{$meta_title = $product->name scope=parent}
{else}
{$meta_title = 'Новый товар' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{* On document load *}
{literal}
<script src="design/js/autocomplete/jquery.autocomplete-min.js"></script>
<style>
.autocomplete-w1 {position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; }
.autocomplete { border:1px solid #999; background:#FFF; cursor:default; text-align:left; overflow-x:auto; min-width: 300px; overflow-y: auto; margin:-6px 6px 6px -6px; /* IE6 specific: */ _height:350px; _margin:0; _overflow-x:hidden; }
.autocomplete .selected { background:#F0F0F0; }
.autocomplete div { padding:2px 5px; white-space:nowrap; }
.autocomplete strong { font-weight:normal; color:#3399FF; }
</style>
<script>
$(function() {
// Добавление категории
$('#product_categories .add').click(function() {
$("#product_categories ul li:last").clone(false).appendTo('#product_categories ul').fadeIn('slow').find("select[name*=categories]:last").focus();
$("#product_categories ul li:last span.add").hide();
$("#product_categories ul li:last span.delete").show();
return false;
});
// Удаление категории
$("#product_categories .delete").live('click', function() {
$(this).closest("li").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Сортировка вариантов
$("#variants_block").sortable({ items: '#variants ul' , axis: 'y', cancel: '#header', handle: '.move_zone' });
// Сортировка вариантов
$("table.related_products").sortable({ items: 'tr' , axis: 'y', cancel: '#header', handle: '.move_zone' });
// Сортировка связанных товаров
$(".sortable").sortable({
items: "div.row",
tolerance:"pointer",
scrollSensitivity:40,
opacity:0.7,
handle: '.move_zone'
});
// Сортировка изображений
$(".images ul").sortable({ tolerance: 'pointer'});
// Удаление изображений
$(".images a.delete").live('click', function() {
$(this).closest("li").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Загрузить изображение с компьютера
$('#upload_image').click(function() {
$("<input class='upload_image' name=images[] type=file multiple>").appendTo('div#add_image').focus().click();
});
// Или с URL
$('#add_image_url').click(function() {
$("<input class='remote_image' name=images_urls[] type=text value='http://'>").appendTo('div#add_image').focus().select();
});
// Удаление варианта
$('a.del_variant').click(function() {
if($("#variants ul").size()>1)
{
$(this).closest("ul").fadeOut(200, function() { $(this).remove(); });
}
else
{
$('#variants_block .variant_name input[name*=variant][name*=name]').val('');
$('#variants_block .variant_name').hide('slow');
$('#variants_block').addClass('single_variant');
}
return false;
});
// Загрузить файл к варианту
$('#variants_block a.add_attachment').click(function() {
$(this).hide();
$(this).closest('li').find('div.browse_attachment').show('fast');
$(this).closest('li').find('input[name*=attachment]').attr('disabled', false);
return false;
});
// Удалить файл к варианту
$('#variants_block a.remove_attachment').click(function() {
closest_li = $(this).closest('li');
closest_li.find('.attachment_name').hide('fast');
$(this).hide('fast');
closest_li.find('input[name*=delete_attachment]').val('1');
closest_li.find('a.add_attachment').show('fast');
return false;
});
// Добавление варианта
var variant = $('#new_variant').clone(true);
$('#new_variant').remove().removeAttr('id');
$('#variants_block span.add').click(function() {
if(!$('#variants_block').is('.single_variant'))
{
$(variant).clone(true).appendTo('#variants').fadeIn('slow').find("input[name*=variant][name*=name]").focus();
}
else
{
$('#variants_block .variant_name').show('slow');
$('#variants_block').removeClass('single_variant');
}
return false;
});
//
// Добавление значения варианта
$('#variants_block span.addv').live('click', function() {
var vli = $(this).parent().parent().parent();
var opt = $(vli).find('div.new div.line').clone(true);
var toa = $(vli).find('div.currect');
$(opt).clone(true).appendTo(toa).fadeIn('slow').find("input").focus();
return false;
});
//
$('#variants_block a.delete').live('click', function() {
$(this).closest('div.line').fadeOut(200, function() { $(this).remove(); });
return false;
});
function show_category_features(category_id)
{
$('ul.prop_ul li').hide();
if(categories_features[category_id] !== undefined)
{
$('ul.prop_ul li').filter(function(){return jQuery.inArray($(this).attr("feature_id"), categories_features[category_id])>-1;}).show();
}
}
// Изменение набора свойств при изменении категории
$('select[name="categories[]"]:first').change(function() {
show_category_features($("option:selected",this).val());
});
show_category_features($('select[name="categories[]"]:first option:selected').val());
// Добавление нового свойства товара
var feature = $('#new_feature').clone(true);
$('#new_feature').remove().removeAttr('id');
$('#add_new_feature').click(function() {
$(feature).clone(true).appendTo('ul.new_features').fadeIn('slow').find("input[name*=new_feature_name]").focus();
return false;
});
// Удаление связанноq статьи
$(".related_articles a.delete").live('click', function() {
$(this).closest("div.row").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Добавление связанной статьи
var new_related_article = $('#new_related_article').clone(true);
$('#new_related_article').remove().removeAttr('id');
$("input#related_articles").autocomplete({
serviceUrl:'ajax/search_articles.php',
minChars:0,
noCache: false,
onSelect:
function(value, data){
new_item = new_related_article.clone().appendTo('.related_articles');
new_item.removeAttr('id');
new_item.find('a.related_article_name').html(data.name);
new_item.find('a.related_article_name').attr('href', 'index.php?module=ArticleAdmin&id='+data.id);
new_item.find('input[name*="related_articles"]').val(data.id);
$("#related_articles").val('');
new_item.show();
},
fnFormatResult:
function(value, data, currentValue){
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
// Удаление связанного товара
$(".related_products a.delete").live('click', function() {
$(this).closest("div.row").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Подсказки для свойств
$('input[name*="options"]').each(function(index) {
f_id = $(this).closest('li').attr('feature_id');
ac = $(this).autocomplete({
serviceUrl:'ajax/options_autocomplete.php',
minChars:0,
params: {feature_id:f_id},
noCache: false
});
});
// Удаление связанного товара
$(".related_products a.delete").live('click', function() {
$(this).closest("div.row").fadeOut(200, function() { $(this).remove(); });
return false;
});
// Добавление связанного товара
var new_related_product = $('#new_related_product').clone(true);
$('#new_related_product').remove().removeAttr('id');
$("input#related_products").autocomplete({
serviceUrl:'ajax/search_products.php',
minChars:0,
noCache: false,
onSelect:
function(value, data){
new_item = new_related_product.clone().appendTo('.related_products');
new_item.removeAttr('id');
new_item.find('a.related_product_name').html(data.name);
new_item.find('a.related_product_name').attr('href', 'index.php?module=ProductAdmin&id='+data.id);
new_item.find('input[name*="related_products"]').val(data.id);
if(data.image)
new_item.find('img.product_icon').attr("src", data.image);
else
new_item.find('img.product_icon').remove();
$("#related_products").val('');
new_item.show();
},
fnFormatResult:
function(value, data, currentValue){
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return (data.image?"<img align=absmiddle src='"+data.image+"'> ":'') + value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
// infinity
$("input[name*=variant][name*=stock]").focus(function() {
if($(this).val() == '∞')
$(this).val('');
return false;
});
$("input[name*=variant][name*=stock]").blur(function() {
if($(this).val() == '')
$(this).val('∞');
});
// Волшебные изображения
name_changed = false;
$("input[name=name]").change(function() {
name_changed = true;
images_loaded = 0;
});
images_num = 8;
images_loaded = 0;
old_wizar_dicon_src = $('#images_wizard img').attr('src');
$('#images_wizard').click(function() {
$('#images_wizard img').attr('src', 'design/images/loader.gif');
if(name_changed)
$('div.images ul li.wizard').remove();
name_changed = false;
key = $('input[name=name]').val();
$.ajax({
url: "ajax/get_images.php",
data: {keyword: key, start: images_loaded},
dataType: 'json',
success: function(data){
for(i=0; i<Math.min(data.length, images_num); i++)
{
image_url = data[i];
$("<li class=wizard><a href='' class='delete'><img src='design/images/cross-circle-frame.png'></a><a href='"+image_url+"' target=_blank><img onerror='$(this).closest(\"li\").remove();' width=100 src='"+image_url+"' /><input name=images_urls[] type=hidden value='"+image_url+"'></a></li>").appendTo('div .images ul');
}
$('#images_wizard img').attr('src', old_wizar_dicon_src);
images_loaded += images_num;
}
});
return false;
});
// Волшебное описание
name_changed = false;
$("input[name=name]").change(function() {
name_changed = true;
});
old_prop_wizard_icon_src = $('#properties_wizard img').attr('src');
$('#properties_wizard').click(function() {
$('#properties_wizard img').attr('src', 'design/images/loader.gif');
if(name_changed)
$('div.images ul li.wizard').remove();
name_changed = false;
key = $('input[name=name]').val();
$.ajax({
url: "ajax/get_info.php",
data: {keyword: key},
dataType: 'json',
success: function(data){
if(data)
{
$('li#new_feature').remove();
for(i=0; i<data.options.length; i++)
{
option_name = data.options[i].name;
option_value = data.options[i].value;
// Добавление нового свойства товара
exists = false;
if(!$('label.property:visible:contains('+option_name+')').closest('li').find('input[name*=options]').val(option_value).length)
{
f = $(feature).clone(true);
f.find('input[name*=new_features_names]').val(option_name);
f.find('input[name*=new_features_values]').val(option_value);
f.appendTo('ul.new_features').fadeIn('slow');
}
}
}
$('#properties_wizard img').attr('src', old_prop_wizard_icon_src);
},
error: function(xhr, textStatus, errorThrown){
alert("Error: " +textStatus);
}
});
return false;
});
// Автозаполнение мета-тегов
meta_title_touched = true;
meta_keywords_touched = true;
meta_description_touched = true;
url_touched = false;
update = {/literal}{if $product->url}true;{else}false;{/if}{literal}
if($('input[name="meta_title"]').val() == generate_meta_title() || $('input[name="meta_title"]').val() == '')
meta_title_touched = false;
if($('input[name="meta_keywords"]').val() == generate_meta_keywords() || $('input[name="meta_keywords"]').val() == '')
meta_keywords_touched = false;
if($('textarea[name="meta_description"]').val() == generate_meta_description() || $('textarea[name="meta_description"]').val() == '')
meta_description_touched = false;
if($('input[name="url"]').val() == generate_url() || $('input[name="url"]').val() == '') url_touched = false;
$('input[name="meta_title"]').change(function() { meta_title_touched = true; });
$('input[name="meta_keywords"]').change(function() { meta_keywords_touched = true; });
$('textarea[name="meta_description"]').change(function() { meta_description_touched = true; });
$('input[name="url"]').change(function() { url_touched = true; });
$('input[name="name"]').keyup(function() { set_meta(); });
$('select[name="brand_id"]').change(function() { set_meta(); });
$('select[name="categories[]"]').change(function() { set_meta(); });
});
function set_meta()
{
if(!meta_title_touched)
// $('input[name="meta_title"]').val(generate_meta_title());
if(!meta_keywords_touched)
// $('input[name="meta_keywords"]').val(generate_meta_keywords());
if(!meta_description_touched)
// $('textarea[name="meta_description"]').val(generate_meta_description());
if(!url_touched && !update)
$('input[name="url"]').val(generate_url());
}
function generate_meta_title()
{
name = $('input[name="name"]').val();
return name;
}
function generate_meta_keywords()
{
name = $('input[name="name"]').val();
result = name;
brand = $('select[name="brand_id"] option:selected').attr('brand_name');
if(typeof(brand) == 'string' && brand!='')
result += ', '+brand;
$('select[name="categories[]"]').each(function(index) {
c = $(this).find('option:selected').attr('category_name');
if(typeof(c) == 'string' && c != '')
result += ', '+c;
});
return result;
}
function generate_meta_description()
{ return '';
if(typeof(tinyMCE.get("annotation")) =='object')
{
description = tinyMCE.get("annotation").getContent().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
return description;
}
else
return $('textarea[name=annotation]').val().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
}
function generate_url()
{
url = $('input[name="name"]').val();
url = url.replace(/[\s]+/gi, '-');
url = translit(url);
url = url.replace(/[^0-9a-z_\-]+/gi, '').toLowerCase();
return url;
}
function translit(str)
{
var ru=("А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я").split("-")
var en=("A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch-'-'-Y-y-'-'-E-e-YU-yu-YA-ya").split("-")
var res = '';
for(var i=0, l=str.length; i<l; i++)
{
var s = str.charAt(i), n = ru.indexOf(s);
if(n >= 0) { res += en[n]; }
else { res += s; }
}
return res;
}
</script>
<style>
.ui-autocomplete{
background-color: #ffffff; width: 100px; overflow: hidden;
border: 1px solid #e0e0e0;
padding: 5px;
}
.ui-autocomplete li.ui-menu-item{
overflow: hidden;
white-space:nowrap;
display: block;
}
.ui-autocomplete a.ui-corner-all{
overflow: hidden;
white-space:nowrap;
display: block;
}
</style>
{/literal}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='added'}Товар добавлен{elseif $message_success=='updated'}Товар изменен{else}{$message_success|escape}{/if}</span>
<a class="link" target="_blank" href="../products/{$product->url}">Открыть товар на сайте</a>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error=='url_exists'}Товар с таким адресом уже существует{elseif $message_error=='empty_name'}Введите название{else}{$message_error|escape}{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$product->name|escape}"/>
<input name=id type="hidden" value="{$product->id|escape}"/>
<div class="checkbox">
<input name=visible value='1' type="checkbox" id="active_checkbox" {if $product->visible}checked{/if}/> <label for="active_checkbox">Активен</label>
</div>
<div class="checkbox">
<input name=featured value="1" type="checkbox" id="featured_checkbox" {if $product->featured}checked{/if}/> <label for="featured_checkbox">Рекомендуемый</label>
</div>
<div class="checkbox">
<input name=ym value='1' type="checkbox" id="ym" {if $product->product_id}{if $product->ym}checked="checked"{/if}{else}checked="checked"{/if}/> <label for="ym">ЯМ</label>
</div>
</div>
<div id="product_brand" {if !$brands}style='display:none;'{/if}>
<label>Бренд</label>
<select name="brand_id">
<option value='0' {if !$product->brand_id}selected{/if} brand_name=''>Не указан</option>
{foreach from=$brands item=brand}
<option {if !$brand->visible}style="color:#999"{/if} value='{$brand->id}' {if $product->brand_id == $brand->id}selected{/if} brand_name='{$brand->name|escape}'>{$brand->name|escape}</option>
{/foreach}
</select>
</div>
<div id="product_categories" {if !$categories}style='display:none;'{/if}>
<label>Категория</label>
<div>
<ul>
{foreach name=categories from=$product_categories item=product_category}
<li>
<select name="categories[]">
{function name=category_select level=0}
{foreach from=$categories item=category}
<option {if !$category->visible}style="color:#999"{/if} value='{$category->id}' {if $category->id == $selected_id}selected{/if} category_name='{$category->name|escape}'>{section name=sp loop=$level}&nbsp;&nbsp;&nbsp;&nbsp;{/section}{$category->name|escape}</option>
{category_select categories=$category->subcategories selected_id=$selected_id level=$level+1}
{/foreach}
{/function}
{category_select categories=$categories selected_id=$product_category->id}
</select>
<span {if not $smarty.foreach.categories.first}style='display:none;'{/if} class="add"><i class="dash_link">Дополнительная категория</i></span>
<span {if $smarty.foreach.categories.first}style='display:none;'{/if} class="delete"><i class="dash_link">Удалить</i></span>
</li>
{/foreach}
</ul>
</div>
</div>
<!-- Варианты товара -->
<div id="variants_block" {assign var=first_variant value=$product_variants|@first}{if $product_variants|@count <= 1 && !$first_variant->name}class=single_variant{/if}>
<ul id="header">
<li class="variant_move"></li>
<li class="variant_name">Название варианта</li>
<li class="variant_sku">Артикул</li>
<li class="variant_price">Цена, {$currency->sign}</li>
<li class="variant_discount">Старая, {$currency->sign}</li>
<li class="variant_amount">Кол-во</li>
<li class="variant_weight">Вес</li>
</ul>
<div id="variants">
{foreach from=$product_variants item=variant}
<ul>
<li class="variant_move"><div class="move_zone"></div></li>
<li class="variant_name"> <input name="variants[id][{$variant->id}]" type="hidden" value="{$variant->id|escape}" /><input name="variants[name][{$variant->id}]" type="" value="{$variant->name|escape}" /> <a class="del_variant" href=""><img src="design/images/cross-circle-frame.png" alt="" /></a></li>
<li class="variant_sku"> <input name="variants[sku][{$variant->id}]" type="text" value="{$variant->sku|escape}" /></li>
<li class="variant_price"> <input name="variants[price][{$variant->id}]" type="text" value="{$variant->price|escape}" /></li>
<li class="variant_discount"> <input name="variants[compare_price][{$variant->id}]" type="text" value="{$variant->compare_price|escape}" /></li>
<li class="variant_amount"> <input name="variants[stock][{$variant->id}]" type="text" value="{if $variant->infinity || $variant->stock == ''}{else}{$variant->stock|escape}{/if}" />{$settings->units}</li>
<li class="variant_weight"> <input name="variants[weight][{$variant->id}]" type="text" value="{$variant->weight|escape}" />кг</li>
<li class="variant_download">
{if $variant->attachment}
<span class=attachment_name>{$variant->attachment|truncate:25:'...':false:true}</span>
<a href='#' class=remove_attachment><img src='design/images/bullet_delete.png' title="Удалить цифровой товар"></a>
<input type=hidden name="delete_attachment[{$variant->id}]" value=''>
<a href='#' class=add_attachment style='display:none;'><img src="design/images/cd_add.png" title="Добавить цифровой товар" /></a>
{else}
<a href='#' class=add_attachment><img src="design/images/cd_add.png" title="Добавить цифровой товар" /></a>
{/if}
<div class=browse_attachment style='display:none;'>
<input disabled type=file name=attachment[{$variant->id}]>
</div>
</li>
<li class="variant_options">
<div class="options">
{if $features2}
{assign var=variant_id value=$variant->id}
<ul>
{foreach $features2 AS $f2}
{assign var=feature_id value=$f2->id}
<li class="frow">
<div class="currect">
<div class="line">
<label class=property>{$f2->name}</label>
<input type="text" class="simpla_inp" name="options2[{$feature_id}][]" value="{$options2.$variant_id.$feature_id[0]->value|escape}" />
{if $f2->multiselect}
<span class="addv"><i class="dash_link">Добавить значение</i></span>
{/if}
<p class="cl"></p>
</div>
{if $options2.$variant_id.$feature_id|count > 1}
{foreach $options2.$variant_id.$feature_id|cut as $ind=>$val}
<div class="line">
<strong>&nbsp;</strong>
<input type="text" class="simpla_inp" name="options2[{$feature_id}][]" value="{$options2.$variant_id.$feature_id.$ind->value|escape}" />
<a href="#" class="delete"></a>
<p class="cl"></p>
</div>
{/foreach}
{/if}
</div>
{if $f2->multiselect}
<div class="new" style='display:none;'>
<div class="line">
<strong>&nbsp;</strong>
<input type="text" class="simpla_inp" name="options2[{$feature_id}][]" value="" />
<a href="#" class="delete"></a>
<p class="cl"></p>
</div>
</div>
{/if}
</li>
<input type="hidden" name="options2[{$feature_id}][]" value="endoptions" />
{/foreach}
</ul>
{/if}
</div>
</li>
</ul>
{/foreach}
</div>
<ul id=new_variant style='display:none;'>
<li class="variant_move"><div class="move_zone"></div></li>
<li class="variant_name"><input name="variants[id][]" type="hidden" value="" /><input name="variants[name][]" type="" value="" /><a class="del_variant" href=""><img src="design/images/cross-circle-frame.png" alt="" /></a></li>
<li class="variant_sku"><input name="variants[sku][]" type="" value="" /></li>
<li class="variant_price"><input name="variants[price][]" type="" value="" /></li>
<li class="variant_discount"><input name="variants[compare_price][]" type="" value="" /></li>
<li class="variant_amount"><input name="variants[stock][]" type="" value="∞" />{$settings->units}</li>
<li class="variant_weight"><input name="variants[weight][]" type="" value="" />кг</li>
<li class="variant_download">
<a href='#' class=add_attachment><img src="design/images/cd_add.png" alt="" /></a>
<div class=browse_attachment style='display:none;'>
<input type=file name=attachment[]>
</div>
</li>
<li class="variant_options">
<div class="options">
{if $features2}
<ul>
{foreach $features2 AS $f2}
{assign var=feature_id value=$f2->id}
<li class="frow">
<div class="currect">
<div class="line">
<label class=property>{$f2->name}</label>
<input type="text" class="simpla_inp" name="options2[{$feature_id}][]" value="" />
{if $f2->multiselect}
<span class="addv"><i class="dash_link">Добавить значение</i></span>
{/if}
<p class="cl"></p>
</div>
</div>
<div class="new" style='display:none;'>
<div class="line">
<strong>&nbsp;</strong>
<input type="text" class="simpla_inp" name="options2[{$feature_id}][]" value="" />
<a href="#" class="delete"></a>
<p class="cl"></p>
</div>
</div>
</li>
<input type="hidden" name="options2[{$feature_id}][]" value="endoptions" />
{/foreach}
</ul>
{/if}
</div>
</li>
</ul>
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
<span class="add" id="add_variant"><i class="dash_link">Добавить вариант</i></span>
</div>
<!-- Варианты товара (The End)-->
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block layer">
<h2>Параметры страницы</h2>
<ul>
<li><label class=property>Адрес</label><div class="page_url"> /products/</div><input name="url" class="page_url" type="text" value="{$product->url|escape}" /></li>
<li><label class=property>Заголовок</label><input name="meta_title" class="simpla_inp" type="text" value="{$product->meta_title|escape}" /></li>
<li><label class=property>H1</label><input name="product_h1" class="simpla_inp" type="text" value="{$product->product_h1|escape}" /></li>
<li><label class=property>Ключевые слова</label><input name="meta_keywords" class="simpla_inp" type="text" value="{$product->meta_keywords|escape}" /></li>
<li><label class=property>Описание</label><textarea name="meta_description" class="simpla_inp" />{$product->meta_description|escape}</textarea></li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
<!-- Свойства товара -->
<script>
var categories_features = new Array();
{foreach from=$categories_features key=c item=fs}
categories_features[{$c}] = Array({foreach from=$fs item=f}'{$f}', {/foreach}0);
{/foreach}
</script>
<div class="block layer" {if !$categories}style='display:none;'{/if}>
<h2>Свойства товара
<a href="#" id=properties_wizard><img src="design/images/wand.png" alt="Подобрать автоматически" title="Подобрать автоматически"/></a>
</h2>
<ul class="prop_ul">
{foreach $features as $feature}
{assign var=feature_id value=$feature->id}
<li feature_id={$feature_id} style='display:none;'><label class=property>{$feature->name}</label><input class="simpla_inp" type="text" name=options[{$feature_id}] value="{$options.$feature_id->value|escape}" /></li>
{/foreach}
</ul>
<!-- Новые свойства -->
<ul class=new_features>
<li id=new_feature><label class=property><input type=text name=new_features_names[]></label><input class="simpla_inp" type="text" name=new_features_values[] /></li>
</ul>
<span class="add"><i class="dash_link" id="add_new_feature">Добавить новое свойство</i></span>
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</div>
<!-- Свойства товара (The End)-->
{*
<!-- Экспорт-->
<div class="block">
<h2>Экспорт товара</h2>
<ul>
<li><input id="exp_yad" type="checkbox" /> <label for="exp_yad">Яндекс Маркет</label> Бид <input class="simpla_inp" type="" name="" value="12" /> руб.</li>
<li><input id="exp_goog" type="checkbox" /> <label for="exp_goog">Google Base</label> </li>
</ul>
</div>
<!-- Свойства товара (The End)-->
*}
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<!-- Изображения товара -->
<div class="block layer images">
<h2>Изображения товара
<a href="#" id=images_wizard><img src="design/images/wand.png" alt="Подобрать автоматически" title="Подобрать автоматически"/></a>
</h2>
<ul>{foreach from=$product_images item=image}<li>
<a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a>
<img src="{$image->filename|resize:100:100}" alt="" />
<input type=hidden name='images[]' value='{$image->id}'>
</li>{/foreach}</ul>
<span class=upload_image><i class="dash_link" id="upload_image">Добавить изображение</i></span> или <span class=add_image_url><i class="dash_link" id="add_image_url">загрузить из интернета</i></span>
<div id=add_image></div>
</div>
<div class="block layer">
<h2>Связанные товары</h2>
<div id=list class="sortable related_products">
{foreach from=$related_products item=related_product}
<div class="row">
<div class="move cell">
<div class="move_zone"></div>
</div>
<div class="image cell">
<input type=hidden name=related_products[] value='{$related_product->id}'>
<a href="{url id=$related_product->id}">
<img class=product_icon src='{$related_product->images[0]->filename|resize:35:35}'>
</a>
</div>
<div class="name cell">
<a href="{url id=$related_product->id}">{$related_product->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_product" class="row" style='display:none;'>
<div class="move cell">
<div class="move_zone"></div>
</div>
<div class="image cell">
<input type=hidden name=related_products[] value=''>
<img class=product_icon src=''>
</div>
<div class="name cell">
<a class="related_product_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name=related id='related_products' class="input_autocomplete" placeholder='Выберите товар чтобы добавить его'>
</div>
<div class="block layer">
<h2>Связанные статьи</h2>
<div id=list class="related_articles">
{foreach from=$related_articles item=related_article}
<div class="row">
<div class="name cell">
<input type=hidden name=related_articles[] value='{$related_article->id}'>
<a href="{url id=$related_article->id}">{$related_article->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_article" class="row" style='display:none;'>
<div class="name cell">
<input type=hidden name=related_articles[] value=''>
<a class="related_article_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name=related id='related_articles' class="input_autocomplete" placeholder='Выберите статью чтобы добавить ее'>
</div>
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</div>
<!-- Правая колонка свойств товара (The End)-->
<!-- Описагние товара -->
<div class="block layer">
<h2>Краткое описание</h2>
<textarea name="annotation" class="editor_small">{$product->annotation|escape}</textarea>
</div>
<div class="block">
<h2>Полное описание</h2>
<textarea name="body" class="editor_large">{$product->body|escape}</textarea>
</div>
<!-- Описание товара (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить" />
</form>
<!-- Основная форма (The End) -->

View File

@@ -0,0 +1,515 @@
{* Вкладки *}
{capture name=tabs}
<li class="active"><a href="{url module=ProductsAdmin keyword=null category_id=null brand_id=null filter=null page=null}">Товары</a></li>
{if in_array('categories', $manager->permissions)}<li><a href="index.php?module=CategoriesAdmin">Категории</a></li>{/if}
{if in_array('brands', $manager->permissions)}<li><a href="index.php?module=BrandsAdmin">Бренды</a></li>{/if}
{if in_array('features', $manager->permissions)}<li><a href="index.php?module=FeaturesAdmin">Свойства</a></li>{/if}
{/capture}
{* Title *}
{if $category}
{$meta_title=$category->name scope=parent}
{else}
{$meta_title='Товары' scope=parent}
{/if}
{* Поиск *}
<form method="get">
<div id="search">
<input type="hidden" name="module" value="ProductsAdmin">
<input class="search" type="text" name="keyword" value="{$keyword|escape}" />
<input class="search_button" type="submit" value=""/>
</div>
</form>
{* Заголовок *}
<div id="header">
{if $products_count}
{if $category->name || $brand->name}
<h1>{$category->name} {$brand->name} ({$products_count} {$products_count|plural:'товар':'товаров':'товара'})</h1>
{elseif $keyword}
<h1>{$products_count|plural:'Найден':'Найдено':'Найдено'} {$products_count} {$products_count|plural:'товар':'товаров':'товара'}</h1>
{else}
<h1>{$products_count} {$products_count|plural:'товар':'товаров':'товара'}</h1>
{/if}
{else}
<h1>Нет товаров</h1>
{/if}
<a class="add" href="{url module=ProductAdmin return=$smarty.server.REQUEST_URI}">Добавить товар</a>
</div>
<div id="main_list">
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
{if $products}
<div id="expand">
<!-- Свернуть/развернуть варианты -->
<a href="#" class="dash_link" id="expand_all">Развернуть все варианты ↓</a>
<a href="#" class="dash_link" id="roll_up_all" style="display:none;">Свернуть все варианты ↑</a>
<!-- Свернуть/развернуть варианты (The End) -->
</div>
{* Основная форма *}
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $products as $product}
<div class="{if !$product->visible}invisible{/if} {if $product->featured}featured{/if} row">
<input type="hidden" name="positions[{$product->id}]" value="{$product->position}">
<div class="move cell"><div class="move_zone"></div></div>
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$product->id}"/>
</div>
<div class="image cell">
{$image = $product->images|@first}
{if $image}
<a href="{url module=ProductAdmin id=$product->id return=$smarty.server.REQUEST_URI}"><img src="{$image->filename|escape|resize:35:35}" /></a>
{/if}
</div>
<div class="name product_name cell">
<div class="variants">
<ul>
{foreach $product->variants as $variant}
<li {if !$variant@first}class="variant" style="display:none;"{/if}>
<i title="{$variant->name|escape}">{$variant->name|escape|truncate:30:'…':true:true}</i>
<input class="price {if $variant->compare_price>0}compare_price{/if}" type="text" name="price[{$variant->id}]" value="{$variant->price}" {if $variant->compare_price>0}title="Старая цена &mdash; {$variant->compare_price} {$currency->sign}"{/if} />{$currency->sign}
<input class="stock" type="text" name="stock[{$variant->id}]" value="{if $variant->infinity}{else}{$variant->stock}{/if}" />{$settings->units}
</li>
{/foreach}
</ul>
{$variants_num = $product->variants|count}
{if $variants_num>1}
<div class="expand_variant">
<a class="dash_link expand_variant" href="#">{$variants_num} {$variants_num|plural:'вариант':'вариантов':'варианта'} ↓</a>
<a class="dash_link roll_up_variant" style="display:none;" href="#">{$variants_num} {$variants_num|plural:'вариант':'вариантов':'варианта'} ↑</a>
</div>
{/if}
</div>
<a href="{url module=ProductAdmin id=$product->id return=$smarty.server.REQUEST_URI}">{$product->name|escape}</a>
</div>
<div class="icons cell">
<a class="preview" title="Предпросмотр в новом окне" href="../products/{$product->url}" target="_blank"></a>
<!-- ЯМ -->
<input type="hidden" value="{$product->ym}" data="{$product->id}" name="ym[{$product->id}]" class="yandex{if $product->ym==1} enabled{/if}"/>
<a class="yandex" title="ЯМ" href="#"></a>
<a class="enable" title="Активен" href="#"></a>
<a class="featured" title="Рекомендуемый" href="#"></a>
<a class="duplicate" title="Дублировать" href="#"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="enable">Сделать видимыми</option>
<option value="disable">Сделать невидимыми</option>
<option value="set_featured">Сделать рекомендуемым</option>
<option value="unset_featured">Отменить рекомендуемый</option>
<option value="duplicate">Создать дубликат</option>
{if $pages_count>1}
<option value="move_to_page">Переместить на страницу</option>
{/if}
{if $categories|count>1}
<option value="move_to_category">Переместить в категорию</option>
{/if}
{if $brands|count>0}
<option value="move_to_brand">Указать бренд</option>
{/if}
<option value="delete">Удалить</option>
</select>
</span>
<span id="move_to_page">
<select name="target_page">
{section target_page $pages_count}
<option value="{$smarty.section.target_page.index+1}">{$smarty.section.target_page.index+1}</option>
{/section}
</select>
</span>
<span id="move_to_category">
<select name="target_category">
{function name=category_select level=0}
{foreach $categories as $category}
<option value='{$category->id}'>{section sp $level}&nbsp;&nbsp;&nbsp;&nbsp;{/section}{$category->name|escape}</option>
{category_select categories=$category->subcategories selected_id=$selected_id level=$level+1}
{/foreach}
{/function}
{category_select categories=$categories}
</select>
</span>
<span id="move_to_brand">
<select name="target_brand">
<option value="0">Не указан</option>
{foreach $all_brands as $b}
<option value="{$b->id}">{$b->name}</option>
{/foreach}
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
{/if}
</form>
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
</div>
<!-- Меню -->
<div id="right_menu">
<!-- Фильтры -->
<ul>
<li {if !$filter}class="selected"{/if}><a href="{url brand_id=null category_id=null keyword=null page=null filter=null}">Все товары</a></li>
<li {if $filter=='featured'}class="selected"{/if}><a href="{url keyword=null brand_id=null category_id=null page=null filter='featured'}">Рекомендуемые</a></li>
<li {if $filter=='discounted'}class="selected"{/if}><a href="{url keyword=null brand_id=null category_id=null page=null filter='discounted'}">Со скидкой</a></li>
</ul>
<!-- Фильтры -->
<!-- Категории товаров -->
{function name=categories_tree}
{if $categories}
<ul>
{if $categories[0]->parent_id == 0}
<li {if !$category->id}class="selected"{/if}><a href="{url category_id=null brand_id=null}">Все категории</a></li>
{/if}
{foreach $categories as $c}
<li category_id="{$c->id}" {if $category->id == $c->id}class="selected"{else}class="droppable category"{/if}><a href='{url keyword=null brand_id=null page=null category_id={$c->id}}'>{$c->name}</a></li>
{categories_tree categories=$c->subcategories}
{/foreach}
</ul>
{/if}
{/function}
{categories_tree categories=$categories}
<!-- Категории товаров (The End)-->
{if $brands}
<!-- Бренды -->
<ul>
<li {if !$brand->id}class="selected"{/if}><a href="{url brand_id=null}">Все бренды</a></li>
{foreach $brands as $b}
<li brand_id="{$b->id}" {if $brand->id == $b->id}class="selected"{else}class="droppable brand"{/if}><a href="{url keyword=null page=null brand_id=$b->id}">{$b->name}</a></li>
{/foreach}
</ul>
<!-- Бренды (The End) -->
{/if}
</div>
<!-- Меню (The End) -->
{* On document load *}
{literal}
<script>
$(function() {
// Сортировка списка
$("#list").sortable({
items: ".row",
tolerance: "pointer",
handle: ".move_zone",
scrollSensitivity: 40,
opacity: 0.7,
helper: function(event, ui){
if($('input[type="checkbox"][name*="check"]:checked').size()<1) return ui;
var helper = $('<div/>');
$('input[type="checkbox"][name*="check"]:checked').each(function(){
var item = $(this).closest('.row');
helper.height(helper.height()+item.innerHeight());
if(item[0]!=ui[0]) {
helper.append(item.clone());
$(this).closest('.row').remove();
}
else {
helper.append(ui.clone());
item.find('input[type="checkbox"][name*="check"]').attr('checked', false);
}
});
return helper;
},
start: function(event, ui) {
if(ui.helper.children('.row').size()>0)
$('.ui-sortable-placeholder').height(ui.helper.height());
},
beforeStop:function(event, ui){
if(ui.helper.children('.row').size()>0){
ui.helper.children('.row').each(function(){
$(this).insertBefore(ui.item);
});
ui.item.remove();
}
},
update:function(event, ui)
{
$("#list_form input[name*='check']").attr('checked', false);
$("#list_form").ajaxSubmit(function() {
colorize();
});
}
});
// Перенос товара на другую страницу
$("#action select[name=action]").change(function() {
if($(this).val() == 'move_to_page')
$("span#move_to_page").show();
else
$("span#move_to_page").hide();
});
$("#pagination a.droppable").droppable({
activeClass: "drop_active",
hoverClass: "drop_hover",
tolerance: "pointer",
drop: function(event, ui){
$(ui.helper).find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(ui.draggable).closest("form").find('select[name="action"] option[value=move_to_page]').attr("selected", "selected");
$(ui.draggable).closest("form").find('select[name=target_page] option[value='+$(this).html()+']').attr("selected", "selected");
$(ui.draggable).closest("form").submit();
return false;
}
});
// Перенос товара в другую категорию
$("#action select[name=action]").change(function() {
if($(this).val() == 'move_to_category')
$("span#move_to_category").show();
else
$("span#move_to_category").hide();
});
$("#right_menu .droppable.category").droppable({
activeClass: "drop_active",
hoverClass: "drop_hover",
tolerance: "pointer",
drop: function(event, ui){
$(ui.helper).find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(ui.draggable).closest("form").find('select[name="action"] option[value=move_to_category]').attr("selected", "selected");
$(ui.draggable).closest("form").find('select[name=target_category] option[value='+$(this).attr('category_id')+']').attr("selected", "selected");
$(ui.draggable).closest("form").submit();
return false;
}
});
// Перенос товара в другой бренд
$("#action select[name=action]").change(function() {
if($(this).val() == 'move_to_brand')
$("span#move_to_brand").show();
else
$("span#move_to_brand").hide();
});
$("#right_menu .droppable.brand").droppable({
activeClass: "drop_active",
hoverClass: "drop_hover",
tolerance: "pointer",
drop: function(event, ui){
$(ui.helper).find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(ui.draggable).closest("form").find('select[name="action"] option[value=move_to_brand]').attr("selected", "selected");
$(ui.draggable).closest("form").find('select[name=target_brand] option[value='+$(this).attr('brand_id')+']').attr("selected", "selected");
$(ui.draggable).closest("form").submit();
return false;
}
});
// Если есть варианты, отображать ссылку на их разворачивание
if($("li.variant").size()>0)
$("#expand").show();
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Показать все варианты
$("#expand_all").click(function() {
$("a#expand_all").hide();
$("a#roll_up_all").show();
$("a.expand_variant").hide();
$("a.roll_up_variant").show();
$(".variants ul li.variant").fadeIn('fast');
return false;
});
// Свернуть все варианты
$("#roll_up_all").click(function() {
$("a#roll_up_all").hide();
$("a#expand_all").show();
$("a.roll_up_variant").hide();
$("a.expand_variant").show();
$(".variants ul li.variant").fadeOut('fast');
return false;
});
// Показать вариант
$("a.expand_variant").click(function() {
$(this).closest("div.cell").find("li.variant").fadeIn('fast');
$(this).closest("div.cell").find("a.expand_variant").hide();
$(this).closest("div.cell").find("a.roll_up_variant").show();
return false;
});
// Свернуть вариант
$("a.roll_up_variant").click(function() {
$(this).closest("div.cell").find("li.variant").fadeOut('fast');
$(this).closest("div.cell").find("a.roll_up_variant").hide();
$(this).closest("div.cell").find("a.expand_variant").show();
return false;
});
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
});
// Удалить товар
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest("div.row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Дублировать товар
$("a.duplicate").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest("div.row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=duplicate]').attr('selected', true);
$(this).closest("form").submit();
});
// Показать товар
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest("div.row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'product', 'id': id, 'values': {'visible': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
// Сделать хитом
$("a.featured").click(function() {
var icon = $(this);
var line = icon.closest("div.row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('featured')?0:1;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'product', 'id': id, 'values': {'featured': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.addClass('featured');
else
line.removeClass('featured');
},
dataType: 'json'
});
return false;
});
// Подтверждение удаления
$("form").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
// Бесконечность на складе
$("input[name*=stock]").focus(function() {
if($(this).val() == '∞')
$(this).val('');
return false;
});
$("input[name*=stock]").blur(function() {
if($(this).val() == '')
$(this).val('∞');
});
// ЯМ от bwdesign.ru
function YMchangeRow(row){
var input = $(row).find("input.yandex");
if($(input).val()==1){
$(input).val(0);
$(input).removeClass('enabled')
}else{
$(input).val(1);
$(input).addClass('enabled')
}
updateYM();
}
function updateYM(){
var icon = $("a.yandex");
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/ym.php?type=prod',
data: $('form#list_form').serialize(),
success: function(data){
icon.removeClass('loading_icon');
},
dataType: 'json'
});
}
$("a.yandex").click(function() {
var th = $(this);
var row = $(th).closest("div.row");
YMchangeRow(row);
return false;
})
});
</script>
{/literal}

View File

@@ -0,0 +1,621 @@
{* Вкладки *}
{capture name=tabs}
<li class="active"><a href="index.php?module=ServicesAdmin">Услуги</a></li>
<li><a href="index.php?module=ServicesMenuAdmin">Меню услуг</a></li>
{/capture}
{if $page->id}
{$meta_title = $page->name scope=parent}
{else}
{$meta_title = 'Новая услуга' scope=parent}
{/if}
{* Подключаем Tiny MCE *}
{include file='tinymce_init.tpl'}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success == 'added'}Услуга добавлена{elseif $message_success == 'updated'}Услуга обновлена{/if}</span>
<a class="link" target="_blank" href="../{$root_url}{$page->url}">Открыть страницу на сайте</a>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error == 'url_exists'}Страница с таким адресом уже существует{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=header type="text" value="{$page->header|escape}"/>
<input name=id type="hidden" value="{$page->id|escape}"/>
<div class="checkbox">
<input name="visible" value='1' type="checkbox" id="active_checkbox" {if $page->visible}checked{/if}/>
<label for="active_checkbox">Активна</label>
</div>
<div class="checkbox">
<input name="show_home" value='1' type="checkbox" id="home_checkbox" {if $page->show_home}checked{/if}/>
<label for="home_checkbox">На главной</label>
</div>
<div class="checkbox">
<input name="show_service" value='1' type="checkbox" id="home_checkbox"
{if $page->show_service}checked{/if}/> <label for="home_checkbox">В услугах</label>
</div>
</div>
<!-- Параметры страницы -->
<div class="block">
<ul>
<li>
<label class=property>Название пункта в меню</label>
<input name="name" class="simpla_inp" type="text" value="{$page->name|escape}"/>
</li>
<li>
<label class=property>Родительский раздел</label>
<select name="parent">
<option value='28'>Верхний уровень</option>
{foreach from=$select_items item=select_item}
<option value='{$select_item->id}'
{if $page->parent == $select_item->id}selected{/if}>{$select_item->name|escape}</option>
{/foreach}
</select>
</li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
<!-- Левая колонка свойств товара -->
<div id="column_left">
<!-- Параметры страницы -->
<div class="block layer">
<h2>Параметры страницы</h2>
<ul>
<li>
<label class=property>Адрес</label>
<div class="page_url">/</div>
<input type="text" name="url" value="{$page->url|escape}" class="page_url" {if $page->brand_id}readonly{/if}/>
</li>
<li>
<label class=property>Заголовок</label>
<input name="meta_title" class="simpla_inp" type="text" value="{$page->meta_title|escape}"/>
</li>
<li>
<label class=property>Ключевые слова</label>
<input name="meta_keywords" class="simpla_inp" type="text" value="{$page->meta_keywords|escape}"/>
</li>
<li>
<label class=property>Описание</label>
<textarea name="meta_description" class="simpla_inp">{$page->meta_description|escape}</textarea>
</li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
{* Услуга по брендам *}
{if $page->menu_id == 3 && !$page->brand_id}
<div class="block layer">
<h2>Услуга по маркам авто</h2>
<div id="service_brands" class="mb-2">
{if $service_brands}
{foreach $service_brands as $brand}
<div data-brand-id="{$brand->id}" class="d-flex mt-2 brand_row">
<input type="hidden" name="brands[]" value="{$brand->id}">
<div class="name flex-grow-1"><a href="/simpla/index.php?module=ServiceAdmin&id={$brand->page_id}" target="_blank">{$brand->name}</a></div>
<div class="icons"><a class="preview" href="/{$root_url}{$brand->page_url}/" target="_blank" title="Посмотреть на сайте"></a></div>
<div class="icons"><a class="enable {if !$brand->page_visible}a-invisible{else}a-visible{/if}" data-id="{$brand->page_id}" href="#" title="Активировать/Деактивировать"></a></div>
<div class="icons"><a class="delete" href="#" title="Удалить"></a></div>
</div>
{/foreach}
{/if}
</div>
<select id="brands_autocomplete" class="mt-2">
<option value="">Выберите марку для добавления</option>
{foreach $brands as $brand}
<option value="{$brand->id}">{$brand->name}</option>
{/foreach}
</select>
<div class="text- mt-1">
или <a id="add_all_brands" class="" href="#">добавьте все марки</a>
</div>
</div>
{/if}
</div>
<!-- Левая колонка свойств товара (The End)-->
<!-- Правая колонка свойств товара -->
<div id="column_right">
<!-- Изображение категории -->
<div class="block layer images">
<h2>Изображение</h2>
<input class='upload_image' name=image type=file>
<input type=hidden name="delete_image" value="">
{if $page->image}
<ul>
<li>
<a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a>
<img src="{$page->image|resizepage:100:100}" alt=""/>
</li>
</ul>
{/if}
</div>
<div class="block">
<h2>Связанные товары <small>(Хиты продаж)</small></h2>
<div id=list class="related_products">
{foreach from=$related_products item=related_product}
<div class="row">
<div class="name cell">
<input type=hidden name=related_products[] value='{$related_product->id}'>
<a href="/simpla/index.php?module=ProductAdmin&id={$related_product->id}">{$related_product->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_product" class="row" style='display:none;'>
<div class="name cell">
<input type=hidden name=related_products[] value=''>
<a class="related_product_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name=related id='related_products' class="input_autocomplete"
placeholder='Выберите товар чтобы добавить его'>
</div>
<div class="block layer">
<h2>Связанные страницы (Другие услуги)</h2>
<div id=list class="related_pages">
{foreach from=$related_pages item=related_page}
<div class="row">
<div class="name cell">
<input type=hidden name=related_pages[] value='{$related_page->id}'>
<a href="{url id=$related_page->id}">{$related_page->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_page" class="row" style='display:none;'>
<div class="name cell">
<input type=hidden name=related_pages[] value=''>
<a class="related_page_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name=related id='related_pages' class="input_autocomplete"
placeholder='Выберите статью чтобы добавить ее'>
</div>
<div class="block layer">
<h2>Связанные страницы (Примеры работ)</h2>
<div id=list class="related_articles">
{foreach from=$related_articles item=related_page}
<div class="row">
<div class="name cell">
<input type=hidden name=related_articles[] value='{$related_page->id}'>
<a href="/simpla/index.php?module=ArticleAdmin&id={$related_page->id}">{$related_page->name}</a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
<div id="new_related_article" class="row" style='display:none;'>
<div class="name cell">
<input type=hidden name=related_articles[] value=''>
<a class="related_article_name" href=""></a>
</div>
<div class="icons cell">
<a href='#' class="delete"></a>
</div>
<div class="clear"></div>
</div>
</div>
<input type=text name=related id='related_articles' class="input_autocomplete"
placeholder='Выберите статью чтобы добавить ее'>
</div>
<div class="block layer">
<ul>
<li>
<label style="float:none;" class=property>Ссылка на все работы</label>
<input style="width:90%" name="works_url" type="text" value="{$page->works_url}"/>
</li>
<li>
<label style="float:none;" class=property>Текст ссылки</label>
<input style="width:90%" name="works_url_text" class="simpla_inp" type="text"
value="{$page->works_url_text|escape}"/>
</li>
</ul>
</div>
</div>
<!-- Правая колонка свойств товара (The End)-->
<!-- Параметры страницы -->
<div class="block layer">
<h2>Краткое содержание</h2>
<textarea name="introtext" style="width: 100%; height: 100px;"
id="_introtext">{$page->introtext|escape}</textarea>
</div>
<!-- Параметры страницы (The End)-->
<!-- Параметры страницы -->
<div class="block layer">
<h2>Текст перед текстом страницы</h2>
<textarea name="toptext" class="editor_large" id="_toptext">{$page->toptext|escape}</textarea>
</div>
<!-- Параметры страницы (The End)-->
<!-- Описагние товара -->
<div class="block layer">
<h2>Текст страницы</h2>
<textarea name="body" id="_body" class="editor_large">{$page->body|escape}</textarea>
</div>
<!-- Описание товара (The End)-->
<!-- Параметры страницы -->
<div class="block layer">
<h2>Текст после текста страницы</h2>
<textarea name="bottext" class="editor_large" id="_bottext">{$page->bottext|escape}</textarea>
</div>
<!-- Параметры страницы (The End)-->
<input class="button_green button_save" type="submit" name="" value="Сохранить"/>
</form>
<!-- Основная форма (The End) -->
{* On document load *}
{literal}
<script src="design/js/jquery/datepicker/jquery.ui.datepicker-ru.js"></script>
<script src="design/js/autocomplete/jquery.autocomplete-min.js"></script>
<style>
.autocomplete-w1 {
position: absolute;
top: 0px;
left: 0px;
margin: 6px 0 0 6px; /* IE6 fix: */
_background: none;
_margin: 1px 0 0 0;
}
.autocomplete {
border: 1px solid #999;
background: #FFF;
cursor: default;
text-align: left;
overflow-x: auto;
min-width: 300px;
overflow-y: auto;
margin: -6px 6px 6px -6px; /* IE6 specific: */
_height: 350px;
_margin: 0;
_overflow-x: hidden;
}
.autocomplete .selected {
background: #F0F0F0;
}
.autocomplete div {
padding: 2px 5px;
white-space: nowrap;
}
.autocomplete strong {
font-weight: normal;
color: #3399FF;
}
</style>
<script>
$(function () {
// Удаление связанного товара
$(".related_products a.delete").live('click', function () {
$(this).closest("div.row").fadeOut(200, function () {
$(this).remove();
});
return false;
});
// Добавление связанного товара
var new_related_product = $('#new_related_product').clone(true);
$('#new_related_product').remove().removeAttr('id');
$("input#related_products").autocomplete({
serviceUrl: 'ajax/search_products.php',
minChars: 0,
noCache: false,
onSelect:
function (value, data) {
new_item = new_related_product.clone().appendTo('.related_products');
new_item.removeAttr('id');
new_item.find('a.related_product_name').html(data.name);
new_item.find('a.related_product_name').attr('href', 'index.php?module=ProductAdmin&id=' + data.id);
new_item.find('input[name*="related_products"]').val(data.id);
$("#related_products").val('');
new_item.show();
},
fnFormatResult:
function (value, data, currentValue) {
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
// Удаление связанноq статьи
$(".related_pages a.delete").live('click', function () {
$(this).closest("div.row").fadeOut(200, function () {
$(this).remove();
});
return false;
});
// Добавление связанной статьи
var new_related_page = $('#new_related_page').clone(true);
$('#new_related_page').remove().removeAttr('id');
$("input#related_pages").autocomplete({
serviceUrl: 'ajax/search_pages.php',
minChars: 0,
noCache: false,
onSelect:
function (value, data) {
new_item = new_related_page.clone().appendTo('.related_pages');
new_item.removeAttr('id');
new_item.find('a.related_page_name').html(data.name);
new_item.find('a.related_page_name').attr('href', 'index.php?module=pageAdmin&id=' + data.id);
new_item.find('input[name*="related_pages"]').val(data.id);
$("#related_pages").val('');
new_item.show();
},
fnFormatResult:
function (value, data, currentValue) {
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
// Удаление связанноq статьи
$(".related_articles a.delete").live('click', function () {
$(this).closest("div.row").fadeOut(200, function () {
$(this).remove();
});
return false;
});
// Добавление связанной статьи
var new_related_article = $('#new_related_article').clone(true);
$('#new_related_article').remove().removeAttr('id');
$("input#related_articles").autocomplete({
serviceUrl: 'ajax/search_articles.php',
minChars: 0,
noCache: false,
onSelect:
function (value, data) {
new_item = new_related_article.clone().appendTo('.related_articles');
new_item.removeAttr('id');
new_item.find('a.related_article_name').html(data.name);
new_item.find('a.related_article_name').attr('href', 'index.php?module=articleAdmin&id=' + data.id);
new_item.find('input[name*="related_articles"]').val(data.id);
$("#related_articles").val('');
new_item.show();
},
fnFormatResult:
function (value, data, currentValue) {
var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
}
});
$(".images a.delete").click(function () {
$("input[name='delete_image']").val('1');
$(this).closest("ul").fadeOut(200, function () {
$(this).remove();
});
return false;
});
// Автозаполнение мета-тегов
menu_item_name_touched = true;
meta_title_touched = true;
meta_keywords_touched = true;
meta_description_touched = true;
url_touched = true;
if ($('input[name="menu_item_name"]').val() == generate_menu_item_name() || $('input[name="name"]').val() == '')
menu_item_name_touched = false;
if ($('input[name="meta_title"]').val() == generate_meta_title() || $('input[name="meta_title"]').val() == '')
meta_title_touched = false;
if ($('input[name="meta_keywords"]').val() == generate_meta_keywords() || $('input[name="meta_keywords"]').val() == '')
meta_keywords_touched = false;
if ($('textarea[name="meta_description"]').val() == generate_meta_description() || $('textarea[name="meta_description"]').val() == '')
meta_description_touched = false;
if ($('input[name="url"]').val() == generate_url())
url_touched = false;
$('input[name="name"]').change(function () {
menu_item_name_touched = true;
});
$('input[name="meta_title"]').change(function () {
meta_title_touched = true;
});
$('input[name="meta_keywords"]').change(function () {
meta_keywords_touched = true;
});
$('textarea[name="meta_description"]').change(function () {
meta_description_touched = true;
});
$('input[name="url"]').change(function () {
url_touched = true;
});
if ($('input[name="name"]').val() == '') {
$('input[name="header"]').keyup(function () {
set_meta();
});
}
});
function set_meta() {
/* MODIFICATION /15.04.2016/ coder:SP отключено автозаполнение титла и кейворда */
if (!menu_item_name_touched)
$('input[name="name"]').val(generate_menu_item_name());
if (!meta_title_touched)
/* $('input[name="meta_title"]').val(generate_meta_title());*/
if (!meta_keywords_touched)
/* $('input[name="meta_keywords"]').val(generate_meta_keywords()); */
if (!meta_description_touched) {
descr = $('textarea[name="meta_description"]');
descr.val(generate_meta_description());
descr.scrollTop(descr.outerHeight());
}
if (!url_touched)
$('input[name="url"]').val(generate_url());
}
function generate_menu_item_name() {
name = $('input[name="header"]').val();
return name;
}
function generate_meta_title() {
name = $('input[name="header"]').val();
return name;
}
function generate_meta_keywords() {
name = $('input[name="header"]').val();
return name;
}
function generate_meta_description() {
/* if(typeof(tinyMCE.get("body")) =='object')
{
description = tinyMCE.get("body").getContent().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
return description;
}
else
return $('textarea[name=body]').val().replace(/(<([^>]+)>)/ig," ").replace(/(\&nbsp;)/ig," ").replace(/^\s+|\s+$/g, '').substr(0, 512);
*/
}
function generate_url() {
url = $('input[name="header"]').val();
url = url.replace(/[\s]+/gi, '-');
url = translit(url);
url = url.replace(/[^0-9a-z_\-]+/gi, '').toLowerCase();
return url;
}
function translit(str) {
var ru = ("А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я").split("-")
var en = ("A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch-'-'-Y-y-'-'-E-e-YU-yu-YA-ya").split("-")
var res = '';
for (var i = 0, l = str.length; i < l; i++) {
var s = str.charAt(i), n = ru.indexOf(s);
if (n >= 0) {
res += en[n];
} else {
res += s;
}
}
return res;
}
</script>
{/literal}
{literal}
<script>
$(document).ready(function () {
var $brands_list = $('#service_brands');
function create_brand_row(brand_id, brand_name) {
return '<div data-brand-id="' + brand_id + '" class="d-flex mt-2 brand_row">' +
' <input type="hidden" name="brands[]" value="' + brand_id + '">' +
' <div class="name flex-grow-1">' + brand_name + '</div>' +
' <div class="icons"><a class="delete" href="#" title="Удалить"></a></div>' +
'</div>';
}
$("#brands_autocomplete").on('change', function () {
var id = this.value,
name = $("option:selected", this).text();
if (!$('[data-brand-id="' + id + '"]', $brands_list).length)
$brands_list.append(create_brand_row(id, name));
$(this).val('');
});
$('#add_all_brands').click(function () {
$brands_list.empty();
$("option", $("#brands_autocomplete")).each(function () {
if (this.value)
$brands_list.append(create_brand_row(this.value, $(this).text()));
});
return false;
})
$brands_list.click(function (e) {
var $el = $(e.target);
if ($el.is('a')) {
if ($el.hasClass('delete')) {
$el.parents('.brand_row').remove();
return false;
} else if($el.hasClass('enable')) {
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
dataType: 'json',
data: {
'object': 'page',
'action': 'enable',
'id': $el.data('id'),
'values': {'visible': $el.hasClass('a-invisible') ? 1 : 0},
'session_id': '{/literal}{$smarty.session.id}{literal}'
},
beforeSend: function () {
$el.addClass('loading_icon');
},
success: function (data) {
$el.toggleClass('a-invisible').toggleClass('a-visible');
$el.removeClass('loading_icon');
}
});
}
}
});
});
</script>
{/literal}

View File

@@ -0,0 +1,220 @@
{* Вкладки *}
{capture name=tabs}
<li class="active"><a href="index.php?module=ServicesAdmin">Услуги</a></li>
<li><a href="index.php?module=ServicesMenuAdmin">Меню услуг</a></li>
{/capture}
{* Title *}
{$meta_title =$menu->name scope=parent}
{* Поиск *}
<form id="search" method="get">
<input type="hidden" name="module" value="ServicesAdmin">
<input type="hidden" name="filter" value='{$filter}'>
<input type="hidden" name="brand_id" value="{$brand_id}">
<input type="hidden" name="parent" value="{$parent}">
<input class="search" type="text" name="keyword" value="{$keyword|escape}">
<input class="search_button" type="submit" value="">
</form>
{* Заголовок *}
<div id="header">
{if $keyword && $services_count>0}
<h1>{$services_count|plural:'Нашлась':'Нашлось':'Нашлись'} {$services_count}
{$services_count|plural:'услуга':'услуг':'услуги'}</h1>
{elseif $services_count>0}
<h1>{$services_count} {$services_count|plural: 'услуга':'услуг':'услуги'}</h1>
<a class="add" href="{url module=ServiceAdmin return=$smarty.server.REQUEST_URI}">Добавить услугу</a>
{else}
<h1>Нет услуг</h1>
<a class="add" href="{url module=ServiceAdmin return=$smarty.server.REQUEST_URI}">Добавить услугу</a>
{/if}
</div>
<style>
</style>
{if $services}
<div id="main_list" class="">
{include file='pagination.tpl'}
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list" class="pb-3">
{foreach $services as $service}
<div class="row {cycle values="even,odd"}">
<div class="checkbox cell pr-1">
<input type="checkbox" name="check[]" value="{$service->id}">
</div>
<div class="cell">
<a href="index.php?module=ServiceAdmin&id={$service->id}"><b>{$service->header|escape}</b></a>
</div>
<div class="icons cell">
<a class="preview" title="Предпросмотр в новом окне" href="../{$root_url}{$service->url}/"
target="_blank"></a>
<a class="enable{if $service->visible} a-visible{else} a-invisible{/if}" title="Активна"
href="#"></a>
{if !$service->has_children}
<a class="delete" title="Удалить" href="#"></a>
{/if}
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id="select">
<select name="action">
<option value="enable">Сделать видимыми</option>
<option value="disable">Сделать невидимыми</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
{include file='pagination.tpl'}
</div>
{else}
Нет услуг
{/if}
{* Правое меню *}
<div id="right_menu">
<h3 class="mb-3 mt-2">Фильтр услуг</h3>
<ul id="service_filter">
<li {if !$filter}class="selected"{/if}>
<a href="{url page=null filter=null}">Все услуги</a>
</li>
<li {if $filter=='branded'}class="selected"{/if}>
<a href="{url page=null filter='branded'}" class="d-inline-flex align-items-center p-1">
Только брендовые
</a>
</li>
<li {if $filter=='home'}class="selected"{/if}>
<a href="{url page=null filter='home'}" class="d-inline-flex align-items-center p-1">
Услуги на главной
</a>
</li>
<li {if $filter=='main'}class="selected"{/if}>
<a href="{url page=null filter='main'}" class="d-inline-flex align-items-center p-1">
Главные услуги
</a>
</li>
<li {if $filter=='enabled'}class="selected"{/if}>
<a href="{url page=null filter='enabled'}" class="d-inline-flex align-items-center p-1">
<img class="mr-1" src="design/images/lightbulb.png">Активные
</a>
</li>
<li {if $filter=='disabled'}class="selected"{/if}>
<a href="{url page=null filter='disabled'}" class="d-inline-flex align-items-center p-1">
<img class="mr-1" src="design/images/lightbulb_off.png">Отключенные
</a>
</li>
</ul>
{if $brands}
<h3 class="mb-2 mt-2">по маркам</h3>
<select id="brand_selector" name="brand">
<option value=""> -- Выберите марку --</option>
{foreach $brands as $brand}
<option value="{$brand->id}" {if $brand->id==$brand_id}selected{/if}>{$brand->name}</option>
{/foreach}
</select>
{/if}
{if $tree}
<h3 class="mb-2 mt-4">по родителю</h3>
<select id="parent_selector" class="mw-100">
<option value=""> -- Выберите родителя --</option>
{function name=services_tree level=0}
{if $services}
{foreach $services as $service}
<option {if $parent==$service->id}selected{/if}
value="{$service->id}">{'&nbsp;'|str_repeat:($level*2)}{$service->name|escape}</option>
{if $service->children}
{services_tree services=$service->children level=$level+1}
{/if}
{/foreach}
{/if}
{/function}
{services_tree services=$tree}
</select>
{/if}
<div class="clearfix"></div>
<a class="text-danger text-center d-block mt-5" href="index.php?module=ServicesAdmin" title="Сбросить все фильтры">Сбросить
все фильтры</a>
</div>
{literal}
<script>
$(document).ready(function () {
var $search_form = $('#search');
$('#brand_selector').on('change', function () {
$('[name="brand_id"]', $search_form).val(this.value);
$search_form.submit();
});
$('#parent_selector').on('change', function () {
$('[name="parent"]', $search_form).val(this.value);
$search_form.submit();
});
// Выделить все
$("#check_all").click(function () {
$('#list input[type="checkbox"][name*="check"]:not(:disabled)').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:disabled):not(:checked)').length > 0);
});
// Активировать
$("a.enable").click(function () {
var icon = $(this);
/*var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();*/
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest("div.row").find('input[type="checkbox"][name*="check"]:first').attr('checked', true);
$(this).closest("form").find('select[name="action"]').val(icon.hasClass('a-invisible') ? 'enable' : 'disable');
$(this).closest("form").submit();
/*icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
dataType: 'json',
data: {
'object': 'page',
'action': 'enable',
'id': id,
'values': {'visible': icon.hasClass('a-invisible') ? 1 : 0},
'session_id': '{/literal}{$smarty.session.id}{literal}'
},
beforeSend: function () {
icon.addClass('loading_icon');
},
success: function (data) {
$('a.enable:first', line).toggleClass('a-invisible').toggleClass('a-visible');
icon.removeClass('loading_icon');
}
});*/
return false;
});
// Удалить
$("a.delete").click(function () {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest("div.row").find('input[type="checkbox"][name*="check"]:first').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Подтвердить удаление
$("#list_form").submit(function () {
if ($('select[name="action"]').val() == 'delete' && !confirm("Подтвердите удаление.\n\nВнимание!\nУслуги будут удалены ТОЛЬКО если не имеют дочерних."))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,238 @@
{* Вкладки *}
{capture name=tabs}
<li><a href="index.php?module=ServicesAdmin">Услуги</a></li>
<li class="active"><a href="index.php?module=ServicesMenuAdmin">Меню услуг</a></li>
{/capture}
{* Title *}
{$meta_title='Меню услуг' scope=parent}
{* Поиск *}
<form id="search" method="get">
<input class="search" type="text" name="keyword" value="">
<input class="search_button" type="submit" value="">
</form>
<style>
.jstree-anchor {
display: inline-flex !important;
width: 100%;
align-items: center;
position: relative;
box-sizing: border-box;
}
.jstree-search a {
color: inherit;
}
#list .row {
border: none;
background: none;
}
#list .icons {
padding-right: 20px;
}
#list .icons a {
margin: 0 5px;
}
#list {
display: none;
}
</style>
{* Заголовок *}
<div id="header">
<h1>Меню услуг</h1>
</div>
<!-- Заголовок (The End) -->
{if $services}
<div id="main_list">
<div class="mb-3">
<a id="expand_all" href="#" class="">Развернуть все</a>&nbsp;/&nbsp;
<a id="collapse_all" href="#">Свернуть все</a>
</div>
<form id="list_form" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list" class="pb-3">
{function name=services_tree level=0}
{if $services}
<ul class="list">
{foreach $services as $service}
<li data-id="{$service->id}" data-parent="{$service->parent}" class="row">
<span class="flex-grow-1">
<a href="{url module=ServiceAdmin id=$service->id return=$smarty.server.REQUEST_URI}">{$service->name|escape}</a>
</span>
<span class="icons">
<a class="preview" title="Предпросмотр в новом окне" href="../{$root_url}{$service->url}/"
target="_blank"></a>
<a class="enable{if $service->visible} a-visible{else} a-invisible{/if}" title="Активна" href="#"></a>
<a class="delete" title="Удалить" href="#"></a>
</span>
{services_tree services=$service->children level=$level+1}
</li>
{/foreach}
</ul>
{/if}
{/function}
{services_tree services=$services}
</div>
<div id="action">
<div id="select">
<select name="action">
<option value="enable">Сделать видимыми</option>
<option value="disable">Сделать невидимыми</option>
<option value="delete">Удалить</option>
</select>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</div>
</form>
</div>
{else}
Нет услуг
{/if}
<div id="right_menu">
</div>
{literal}
<link rel="stylesheet" href="design/js/jstree/themes/default/style.css">
<script src="design/js/jquery/jquery.min.js"></script>
<script src="design/js/jstree/jstree.js"></script>
<script>
$(document).ready(function () {
var $tree = $("#list"),
$form = $("#list_form");
function enable_node(icon, node) {
var visible = icon.hasClass('a-invisible') ? 1 : 0;
$tree.jstree('uncheck_all');
$tree.jstree('check_node', node);
$form.find('select[name="action"]').val(visible ? 'enable' : 'disable');
$form.submit();
/*$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
dataType: 'json',
data: {
'object': 'page',
'action': 'enable',
'id': node.data.id,
'values': {'visible': icon.hasClass('a-invisible') ? 1 : 0},
'session_id': '{/literal}{$smarty.session.id}{literal}'
},
beforeSend: function () {
icon.addClass('loading_icon');
},
success: function (data) {
$('a.enable:first', icon.closest(".row")).toggleClass('a-invisible').toggleClass('a-visible');
icon.removeClass('loading_icon');
}
});*/
}
function delete_node(icon, node){
$tree.jstree('uncheck_all');
$tree.jstree('check_node', node);
$form.find('select[name="action"]').val('delete')
//$form.find('select[name="action"] option[value=delete]').attr('selected', true);
$form.submit();
}
$tree.jstree({
"core": {
animation: 0,
multiple: false,
check_callback: function (operation, node, node_parent, node_position, more) {
return operation === 'move_node' ? true : false;
},
themes: {"theme": "default", "dots": false, "stripes": true, icons: false},
},
"checkbox": {
//visible: false,
whole_node: false,
tie_selection: false,
three_state: false
//keep_selected_style : false
//cascade: 'down'
},
"plugins": [
"dnd", "checkbox", "wholerow", "search"
]
}).on("click.jstree", function (e, data) {
var $el = $(e.target);
if ($el.is('a')) {
e.stopPropagation();
e.stopImmediatePropagation();
if($el.hasClass('enable') || $el.hasClass('delete')) {
if($el.hasClass('enable') )
enable_node($el, $tree.jstree('get_node', e.target));
else if($el.hasClass('delete') )
delete_node($el, $tree.jstree('get_node', e.target));
return false;
}
}
}).on("move_node.jstree", function (e, data) {
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
dataType: 'json',
data: {
'object': 'page',
'action': 'move',
'id': data.node.id,
'values': {
'parent': data.parent === "#" ? 28 : data.parent,
'position':data.position
},
'session_id': '{/literal}{$smarty.session.id}{literal}'
},
success: function (data) {
return;
}
});
}).on("ready.jstree", function (e, data){
//$tree.jstree('open_all');
$tree.show();
$.each(data.instance.get_json(null, {flat: true}), function(index, node) {
$tree.jstree('set_id', node.id, node.data.id);
});
});
$("#search").submit(function (e) {
e.preventDefault();
$tree.jstree("search", $("#search .search").val());
return false;
});
$('#collapse_all').click(function () {
$tree.jstree('close_all');
return false;
});
$('#expand_all').click(function () {
$tree.jstree('open_all');
return false;
});
// Выделить все
$("#check_all").click(function () {
$tree.jstree('check_all');
});
$form.submit(function (e) {
// Подтвердить удаление
if ($('select[name="action"]').val() === 'delete' && !confirm("Подтвердите удаление.\n\nВнимание!\nБудут удалены ВСЕ страницы, включая дочерние к выбранным!"))
return false;
var inp = document.createElement("INPUT");
inp.name = 'check[]';
inp.type = "hidden";
$($tree.jstree("get_checked", true)).each(function() {
$form.append($(inp).clone().val(this.data.id));
});
//return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,172 @@
{capture name=tabs}
<li class="active"><a href="index.php?module=SettingsAdmin">Настройки</a></li>
{if in_array('currency', $manager->permissions)}<li><a href="index.php?module=CurrencyAdmin">Валюты</a></li>{/if}
{if in_array('delivery', $manager->permissions)}<li><a href="index.php?module=DeliveriesAdmin">Доставка</a></li>{/if}
{if in_array('payment', $manager->permissions)}<li><a href="index.php?module=PaymentMethodsAdmin">Оплата</a></li>{/if}
{if in_array('managers', $manager->permissions)}<li><a href="index.php?module=ManagersAdmin">Менеджеры</a></li>{/if}
{if in_array('maillist', $manager->permissions)}<li><a href="index.php?module=MailingMethodsAdmin">Рассылка</a></li>{/if}
{/capture}
{$meta_title = "Настройки" scope=parent}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success == 'saved'}Настройки сохранены{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error == 'watermark_is_not_writable'}Установите права на запись для файла {$config->watermark_file}{/if}</span>
<a class="button" href="">Вернуться</a>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product enctype="multipart/form-data">
<input type=hidden name="session_id" value="{$smarty.session.id}">
<!-- Параметры -->
<div class="block">
<h2>Настройки сайта</h2>
<ul>
<li><label class=property>Имя сайта</label><input name="site_name" class="simpla_inp" type="text" value="{$settings->site_name|escape}" /></li>
<li><label class=property>Имя компании</label><input name="company_name" class="simpla_inp" type="text" value="{$settings->company_name|escape}" /></li>
<li><label class=property>Формат даты</label><input name="date_format" class="simpla_inp" type="text" value="{$settings->date_format|escape}" /></li>
<li><label class=property>Email для восстановления пароля</label><input name="admin_email" class="simpla_inp" type="text" value="{$settings->admin_email|escape}" /></li>
</ul>
</div>
<div class="block layer">
<h2>Оповещения</h2>
<ul>
<li><label class=property>Оповещение о заказах</label><input name="order_email" class="simpla_inp" type="text" value="{$settings->order_email|escape}" /></li>
<li><label class=property>Оповещение о комментариях</label><input name="comment_email" class="simpla_inp" type="text" value="{$settings->comment_email|escape}" /></li>
<li><label class=property>Обратный адрес оповещений</label><input name="notify_from_email" class="simpla_inp" type="text" value="{$settings->notify_from_email|escape}" /></li>
</ul>
</div>
<div class="block layer">
<h2>Раздел "Услуги"</h2>
<ul>
<li><label class=property>Оповещение о заполненных формах</label><input name="form_email" class="simpla_inp" type="text" value="{$settings->form_email|escape}" /></li>
<li><label class=property>Префикс заголовков в оповещениях</label><input name="form_prefix" class="simpla_inp" type="text" value="{$settings->form_prefix|escape}" /></li>
<li><label class=property>Сообщение об успешной отправке</label><input name="form_sent" class="simpla_inp" type="text" value="{$settings->form_sent|escape}" /></li>
<li><label class=property>Сообщение об ошибке</label><input name="form_fail" class="simpla_inp" type="text" value="{$settings->form_fail|escape}" /></li>
</ul>
</div>
<!-- Параметры (The End)-->
<div class="block layer">
<h2>EMS настройка</h2>
<ul>
<li><label class=property>Точка отправления</label>
<select name="emsfrom" class="simpla_inp">
{foreach $cities AS $k=>$c}
<option value="{$k}" {if $k==$settings->emsfrom}selected="selected"{/if}>{$c}</option>
{/foreach}
</select>
</li>
<li><label class=property>со страхованием (1% от суммы заказа)</label>
<input name=emstax value='1' type="checkbox" {if $settings->emstax}checked{/if}/>
</li>
</ul>
</div>
<!-- Параметры (The End)-->
<!-- Параметры -->
<div class="block layer">
<h2>Формат цены</h2>
<ul>
<li><label class=property>Разделитель копеек</label>
<select name="decimals_point" class="simpla_inp">
<option value='.' {if $settings->decimals_point == '.'}selected{/if}>точка: 12.45 рублей</option>
<option value=',' {if $settings->decimals_point == ','}selected{/if}>запятая: 12,45 рублей</option>
</select>
</li>
<li><label class=property>Разделитель тысяч</label>
<select name="thousands_separator" class="simpla_inp">
<option value='' {if $settings->thousands_separator == ''}selected{/if}>без разделителя: 1245678 рублей</option>
<option value=' ' {if $settings->thousands_separator == ' '}selected{/if}>пробел: 1 245 678 рублей</option>
<option value=',' {if $settings->thousands_separator == ','}selected{/if}>запятая: 1,245,678 рублей</option>
</select>
</li>
</ul>
</div>
<!-- Параметры (The End)-->
<!-- Параметры -->
<div class="block layer">
<h2>Настройки каталога</h2>
<ul>
<li><label class=property>Товаров на странице сайта</label><input name="products_num" class="simpla_inp" type="text" value="{$settings->products_num|escape}" /></li>
<li><label class=property>Товаров на странице админки</label><input name="products_num_admin" class="simpla_inp" type="text" value="{$settings->products_num_admin|escape}" /></li>
<li><label class=property>Максимум товаров в заказе</label><input name="max_order_amount" class="simpla_inp" type="text" value="{$settings->max_order_amount|escape}" /></li>
<li><label class=property>Единицы измерения товаров</label><input name="units" class="simpla_inp" type="text" value="{$settings->units|escape}" /></li>
</ul>
</div>
<!-- Параметры (The End)-->
<!-- Параметры -->
<div class="block layer">
<h2>Изображения товаров</h2>
<ul>
<li><label class=property>Водяной знак</label>
<input name="watermark_file" class="simpla_inp" type="file" />
<img style='display:block; border:1px solid #d0d0d0; margin:10px 0 10px 0;' src="{$config->root_url}/{$config->watermark_file}?{math equation='rand(10,10000)'}">
</li>
<li><label class=property>Горизонтальное положение водяного знака</label><input name="watermark_offset_x" class="simpla_inp" type="text" value="{$settings->watermark_offset_x|escape}" /> %</li>
<li><label class=property>Вертикальное положение водяного знака</label><input name="watermark_offset_y" class="simpla_inp" type="text" value="{$settings->watermark_offset_y|escape}" /> %</li>
<li><label class=property>Прозрачность знака (больше &mdash; прозрачней)</label><input name="watermark_transparency" class="simpla_inp" type="text" value="{$settings->watermark_transparency|escape}" /> %</li>
<li><label class=property>Резкость изображений (рекомендуется 20%)</label><input name="images_sharpen" class="simpla_inp" type="text" value="{$settings->images_sharpen|escape}" /> %</li>
</ul>
</div>
<!-- Параметры (The End)-->
<!-- Параметры -->
<div class="block layer">
<h2>Интеграция с <a href="http://prostiezvonki.ru">простыми звонками</a></h2>
<ul>
<li><label class=property>Сервер</label><input name="pz_server" class="simpla_inp" type="text" value="{$settings->pz_server|escape}" /></li>
<li><label class=property>Пароль</label><input name="pz_password" class="simpla_inp" type="text" value="{$settings->pz_password|escape}" /></li>
<li><label class=property>Телефоны менеджеров:</label></li>
{foreach $managers as $manager}
<li><label class=property>{$manager->login}</label><input name="pz_phones[{$manager->login}]" class="simpla_inp" type="text" value="{$settings->pz_phones[$manager->login]|escape}" /></li>
{/foreach}
</ul>
</div>
<!-- Параметры (The End)-->
<input class="button_green button_save" type="submit" name="save" value="Сохранить" />
<!-- Левая колонка свойств товара (The End)-->
</form>
<!-- Основная форма (The End) -->
{literal}
<script>
$(function() {
$('#change_password_form').hide();
$('#change_password').click(function() {
$('#change_password_form').show();
});
});
</script>
{/literal}

View File

@@ -0,0 +1,250 @@
{capture name=tabs}
<li class="active"><a href="{url module=StatsAdmin}">Статистика</a></li>
{/capture}
{$meta_title='Статистика' scope=parent}
{* On document load *}
{literal}
<script src="design/js/highcharts/js/highcharts.js" type="text/javascript"></script>
<script>
var chart;
$(function() {
var options = {
chart: {
zoomType: 'x',
type: 'column',
renderTo: 'container',
defaultSeriesType: 'line'
},
title: {
text: 'Статистика заказов'
},
subtitle: {
text: ''
},
xAxis: {
type: 'datetime'
},
yAxis: {
title: {
text: '{/literal}{$currency->name}{literal}'
}
},
plotOptions: {
line: {
dataLabels: {
enabled: true
},
enableMouseTracking: true
}
},
series: []
};
$.get('ajax/stat/stat.php', function(data) {
var series = {
data: []
};
series.name = 'Сумма заказов, {/literal}{$currency->sign}{literal}';
d = new Date();
for(i=0; i<365; i++)
{
//series.data.push([Date.UTC(1900+d.getYear(), d.getMonth(), d.getDate()), 0]);
d.setDate(d.getDate()-1);
}
// Iterate over the lines and add categories or series
$.each(data, function(lineNo, line) {
series.data.push([Date.UTC(line.year, line.month-1, line.day), parseInt(line.y)]);
});
options.series.push(series);
// Create the chart
var chart = new Highcharts.Chart(options);
});
});
Highcharts.theme = {
colors: ["#DDDF0D", "#7798BF", "#55BF3B", "#DF5353", "#aaeeee", "#ff0066", "#eeaaee",
"#55BF3B", "#DF5353", "#7798BF", "#aaeeee"],
chart: {
backgroundColor: {
linearGradient: [0, 0, 0, 400],
stops: [
[0, 'rgb(96, 96, 96)'],
[1, 'rgb(16, 16, 16)']
]
},
borderWidth: 0,
borderRadius: 15,
plotBackgroundColor: null,
plotShadow: false,
plotBorderWidth: 0
},
title: {
style: {
color: '#FFF',
font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
}
},
subtitle: {
style: {
color: '#DDD',
font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
}
},
xAxis: {
gridLineWidth: 0,
lineColor: '#999',
tickColor: '#999',
labels: {
style: {
color: '#999',
fontWeight: 'bold'
}
},
title: {
style: {
color: '#AAA',
font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
}
}
},
yAxis: {
alternateGridColor: null,
minorTickInterval: null,
gridLineColor: 'rgba(255, 255, 255, .1)',
lineWidth: 0,
tickWidth: 0,
labels: {
style: {
color: '#999',
fontWeight: 'bold'
}
},
title: {
style: {
color: '#AAA',
font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
}
}
},
legend: {
itemStyle: {
color: '#CCC'
},
itemHoverStyle: {
color: '#FFF'
},
itemHiddenStyle: {
color: '#333'
}
},
labels: {
style: {
color: '#CCC'
}
},
tooltip: {
backgroundColor: {
linearGradient: [0, 0, 0, 50],
stops: [
[0, 'rgba(96, 96, 96, .8)'],
[1, 'rgba(16, 16, 16, .8)']
]
},
borderWidth: 0,
style: {
color: '#FFF'
}
},
plotOptions: {
line: {
dataLabels: {
color: '#CCC'
},
marker: {
lineColor: '#333'
}
},
spline: {
marker: {
lineColor: '#333'
}
},
scatter: {
marker: {
lineColor: '#333'
}
}
},
toolbar: {
itemStyle: {
color: '#CCC'
}
},
navigation: {
buttonOptions: {
backgroundColor: {
linearGradient: [0, 0, 0, 20],
stops: [
[0.4, '#606060'],
[0.6, '#333333']
]
},
borderColor: '#000000',
symbolStroke: '#C0C0C0',
hoverSymbolStroke: '#FFFFFF'
}
},
exporting: {
buttons: {
exportButton: {
symbolFill: '#55BE3B'
},
printButton: {
symbolFill: '#7797BE'
}
}
},
// special colors for some of the demo examples
legendBackgroundColor: 'rgba(48, 48, 48, 0.8)',
legendBackgroundColorSolid: 'rgb(70, 70, 70)',
dataLabelsColor: '#444',
textColor: '#E0E0E0',
maskColor: 'rgba(255,255,255,0.3)'
};
// Apply the theme
var highchartsOptions = Highcharts.setOptions(Highcharts.theme);
</script>
{/literal}
<div>
<div id='container'>
</div>
</div>

View File

@@ -0,0 +1,124 @@
{capture name=tabs}
<li><a href="index.php?module=ThemeAdmin">Тема</a></li>
<li><a href="index.php?module=TemplatesAdmin">Шаблоны</a></li>
<li class="active"><a href="index.php?module=StylesAdmin">Стили</a></li>
<li><a href="index.php?module=ImagesAdmin">Изображения</a></li>
{/capture}
{if $style_file}
{$meta_title = "Стиль $style_file" scope=parent}
{/if}
{* Подключаем редактор кода *}
<link rel="stylesheet" href="design/js/codemirror/lib/codemirror.css">
<script src="design/js/codemirror/lib/codemirror.js"></script>
<script src="design/js/codemirror/lib/overlay.js"></script>
<link rel="stylesheet" href="design/js/codemirror/mode/css/css.css">
<script src="design/js/codemirror/mode/css/css.js"></script>
{literal}
<style type="text/css">
.CodeMirror {font-family:'Courier New'; padding-bottom:20px; margin-bottom:10px; border:1px solid #c0c0c0; background-color: #ffffff; height: auto; min-height: 300px; width:100%;}
.activeline {background: #f0fcff !important;}
.smarty {color: #ff008a;}
</style>
<script>
$(function() {
// Сохранение кода аяксом
function save()
{
$('.CodeMirror').css('background-color','#e0ffe0');
content = editor.getValue();
$.ajax({
type: 'POST',
url: 'ajax/save_style.php',
data: {'content': content, 'theme':'{/literal}{$theme}{literal}', 'style': '{/literal}{$style_file}{literal}', 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
$('.CodeMirror').animate({'background-color': '#ffffff'});
},
dataType: 'json'
});
}
// Нажали кнопку Сохранить
$('input[name="save"]').click(function() {
save();
});
// Обработка ctrl+s
var isCtrl = false;
var isCmd = false;
$(document).keyup(function (e) {
if(e.which == 17) isCtrl=false;
if(e.which == 91) isCmd=false;
}).keydown(function (e) {
if(e.which == 17) isCtrl=true;
if(e.which == 91) isCmd=true;
if(e.which == 83 && (isCtrl || isCmd)) {
save();
e.preventDefault();
}
});
});
</script>
{/literal}
<h1>Тема {$theme}, стиль {$style_file}</h1>
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>
{if $message_error == 'permissions'}Установите права на запись для файла {$style_file}
{elseif $message_error == 'theme_locked'}Текущая тема защищена от изменений. Создайте копию темы.
{else}{$message_error}{/if}
</span>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Список файлов для выбора -->
<div class="block layer">
<div class="templates_names">
{foreach item=s from=$styles}
<a {if $style_file == $s}class="selected"{/if} href='index.php?module=StylesAdmin&file={$s}'>{$s}</a>
{/foreach}
</div>
</div>
{if $style_file}
<div class="block">
<form>
<textarea id="content" name="content" style="width:700px;height:500px;">{$style_content|escape}</textarea>
</form>
<input class="button_green button_save" type="button" name="save" value="Сохранить" />
<div class="block">
{* Подключение редактора *}
{literal}
<script>
var editor = CodeMirror.fromTextArea(document.getElementById("content"), {
mode: {name: "css"},
lineNumbers: true,
matchBrackets: false,
enterMode: 'keep',
indentWithTabs: false,
indentUnit: 1,
tabMode: 'classic',
onCursorActivity: function() {
editor.setLineClass(hlLine, null);
hlLine = editor.setLineClass(editor.getCursor().line, "activeline");
}
});
var hlLine = editor.setLineClass(0, "activeline");
</script>
{/literal}
{/if}

View File

@@ -0,0 +1,141 @@
{capture name=tabs}
<li><a href="index.php?module=ThemeAdmin">Тема</a></li>
<li class="active"><a href="index.php?module=TemplatesAdmin">Шаблоны</a></li>
<li><a href="index.php?module=StylesAdmin">Стили</a></li>
<li><a href="index.php?module=ImagesAdmin">Изображения</a></li>
{/capture}
{if $template_file}
{$meta_title = "Шаблон $template_file" scope=parent}
{/if}
{* Подключаем редактор кода *}
<link rel="stylesheet" href="design/js/codemirror/lib/codemirror.css">
<script src="design/js/codemirror/lib/codemirror.js"></script>
<script src="design/js/codemirror/lib/overlay.js"></script>
<link rel="stylesheet" href="design/js/codemirror/mode/xml/xml.css">
<script src="design/js/codemirror/mode/xml/xml.js"></script>
{literal}
<style type="text/css">
.CodeMirror {font-family:'Courier New';padding-bottom:20px; margin-bottom:10px; border:1px solid #c0c0c0; background-color: #ffffff; height: auto; min-height: 300px; width:100%;}
.activeline {background: #f0fcff !important;}
.smarty {color: #ff008a;}
</style>
<script>
$(function() {
// Сохранение кода аяксом
function save()
{
$('.CodeMirror').css('background-color','#e0ffe0');
content = editor.getValue();
$.ajax({
type: 'POST',
url: 'ajax/save_template.php',
data: {'content': content, 'theme':'{/literal}{$theme}{literal}', 'template': '{/literal}{$template_file}{literal}', 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
$('.CodeMirror').animate({'background-color': '#ffffff'});
},
dataType: 'json'
});
}
// Нажали кнопку Сохранить
$('input[name="save"]').click(function() {
save();
});
// Обработка ctrl+s
var isCtrl = false;
var isCmd = false;
$(document).keyup(function (e) {
if(e.which == 17) isCtrl=false;
if(e.which == 91) isCmd=false;
}).keydown(function (e) {
if(e.which == 17) isCtrl=true;
if(e.which == 91) isCmd=true;
if(e.which == 83 && (isCtrl || isCmd)) {
save();
e.preventDefault();
}
});
});
</script>
{/literal}
<h1>Тема {$theme}, шаблон {$template_file}</h1>
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>
{if $message_error == 'permissions'}Установите права на запись для файла {$template_file}
{elseif $message_error == 'theme_locked'}Текущая тема защищена от изменений. Создайте копию темы.
{else}{$message_error}{/if}
</span>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Список файлов для выбора -->
<div class="block layer">
<div class="templates_names">
{foreach item=t from=$templates}
<a {if $template_file == $t}class="selected"{/if} href='index.php?module=TemplatesAdmin&file={$t}'>{$t}</a>
{/foreach}
</div>
</div>
{if $template_file}
<div class="block">
<form>
<textarea id="template_content" name="template_content" style="width:700px;height:500px;">{$template_content|escape}</textarea>
</form>
<input class="button_green button_save" type="button" name="save" value="Сохранить" />
</div>
{* Подключение редактора *}
{literal}
<script>
CodeMirror.defineMode("smarty", function(config, parserConfig) {
var smartyOverlay = {
token: function(stream, state){
if (stream.match("{*"))
return null;
if (stream.match("{") && (stream.next()!=' ') && stream.next()!= null) {
while ((ch = stream.next()) != null)
if (ch == "}") break;
return "smarty";
}
while (stream.next() != null && !stream.match('{', false)) {}
return null;
}
};
return CodeMirror.overlayParser(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), smartyOverlay);
});
var editor = CodeMirror.fromTextArea(document.getElementById("template_content"), {
mode: {name: "smarty", htmlMode: true},
lineNumbers: true,
matchBrackets: false,
enterMode: 'keep',
indentWithTabs: false,
indentUnit: 1,
tabMode: 'classic',
onCursorActivity: function() {
editor.setLineClass(hlLine, null);
hlLine = editor.setLineClass(editor.getCursor().line, "activeline");
}
});
var hlLine = editor.setLineClass(0, "activeline");
</script>
{/literal}
{/if}

View File

@@ -0,0 +1,107 @@
{capture name=tabs}
<li class="active"><a href="index.php?module=ThemeAdmin">Тема</a></li>
<li><a href="index.php?module=TemplatesAdmin">Шаблоны</a></li>
<li><a href="index.php?module=StylesAdmin">Стили</a></li>
<li><a href="index.php?module=ImagesAdmin">Изображения</a></li>
{/capture}
{if $theme->name}
{$meta_title = "Тема {$theme->name}" scope=parent}
{/if}
<script>
{literal}
$(function() {
// Выбрать тему
$('.set_main_theme').click(function() {
$("form input[name=action]").val('set_main_theme');
$("form input[name=theme]").val($(this).closest('li').attr('theme'));
$("form").submit();
});
// Клонировать текущую тему
$('#header .add').click(function() {
$("form input[name=action]").val('clone_theme');
$("form").submit();
});
// Редактировать название
$("a.edit").click(function() {
name = $(this).closest('li').attr('theme');
inp1 = $('<input type=hidden name="old_name[]">').val(name);
inp2 = $('<input type=text name="new_name[]">').val(name);
$(this).closest('li').find("p.name").html('').append(inp1).append(inp2);
inp2.focus().select();
return false;
});
// Удалить тему
$('.delete').click(function() {
$("form input[name=action]").val('delete_theme');
$("form input[name=theme]").val($(this).closest('li').attr('theme'));
$("form").submit();
});
$("form").submit(function() {
if($("form input[name=action]").val()=='delete_theme' && !confirm('Подтвердите удаление'))
return false;
});
});
{/literal}
</script>
<div id="header">
<h1 class="{if $theme->locked}locked{/if}">Текущая тема &mdash; {$theme->name}</h1>
<a class="add" href="#">Создать копию темы {$settings->theme}</a>
</div>
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error == 'permissions'}Установите права на запись для папки {$themes_dir}
{elseif $message_error == 'name_exists'}Тема с таким именем уже существует
{else}{$message_error}{/if}</span>
</div>
<!-- Системное сообщение (The End)-->
{/if}
<div class="block layer">
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<input type=hidden name="action">
<input type=hidden name="theme">
<ul class="themes">
{foreach $themes as $t}
<li theme='{$t->name|escape}'>
{if $theme->name == $t->name}<img class="tick" src='design/images/tick.png'> {/if}
{if $t->locked}<img class="tick" src='design/images/lock_small.png'> {/if}
{if $theme->name != $t->name && !$t->locked}
<a href='#' title="Удалить" class='delete'><img src='design/images/delete.png'></a>
<a href='#' title="Переименовать" class='edit'><img src='design/images/pencil.png'></a>
{elseif $theme->name != $t->name}
{*<a href='#' title="Выбрать" class='select set_main_theme'><img src='design/images/tick.png'></a>*}
{elseif !$t->locked}
<a href='#' title="Удалить" class='delete'><img src='design/images/delete.png'></a>
<a href='#' title="Изменить название" class='edit'><img src='design/images/pencil.png'></a>
{/if}
{if $theme->name == $t->name}
<p class=name>{$t->name|escape|truncate:16:'...'}</p>
{else}
<p class=name><a href='#' class='set_main_theme'>{$t->name|escape|truncate:16:'...'}</a></p>
{/if}
<a href="index.php?module=TemplatesAdmin"><img class="preview" src='{$root_dir}../design/{$t->name}/preview.png'></a>
</li>
{/foreach}
</ul>
<div class="block">
<input class="button_green button_save" type="submit" name="save" value="Сохранить" />
</div>
</form>
</div>

View File

@@ -0,0 +1,77 @@
<script type="text/javascript" src="design/js/ckeditor/ckeditor.js"></script>
<script>
var tinyMCE = {
get:function(){}
}
$(function(){
$('.editor_large, .editor_small').each(function(){
var name = $(this).attr('name');
CKEDITOR.replace( name, {
height:400
});
});
/*
CKEDITOR.replace( 'body', {
height:400
});
CKEDITOR.replace( 'annotation', {
height:400
});
*/
});
</script>
{*
<script language="javascript" type="text/javascript" src="design/js/tiny_mce/plugins/smimage/smplugins.js"></script>
<script language="javascript" type="text/javascript" src="design/js/tiny_mce/tiny_mce.js"></script>
<script language="javascript">
tinyMCE.init({literal}{{/literal}
// General options
mode : "specific_textareas",
editor_selector : /editor/,
theme : "advanced",
language : "ru",
theme_advanced_path : false,
apply_source_formatting : false,
plugins : "jaretypograph,smimage,smeditimage,smexplorer,safari,spellchecker,style,table,save,advimage,advlink,autolink,inlinepopups,media,contextmenu,paste,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras",
relative_urls : false,
remove_script_host : false,
convert_urls : true,
verify_html: false,
remove_linebreaks : false,
content_css :"../design/{$settings->theme}/css/style.css",
spellchecker_languages : "+Russian=ru,+English=en",
valid_elements : "*[*]",
extended_valid_elements : "*[*],script[charset|defer|language|src|type],style",
// Theme options
theme_advanced_buttons1 : "save,newdocument,|,paste,pastetext,pasteword,|,undo,redo,|,bold,italic,underline,strikethrough,|,sub,sup,|,bullist,numlist,|,justifyleft,justifycenter,justifyright,justifyfull,|,forecolor,backcolor,|,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "tablecontrols,|,link,unlink,anchor,smimage,smeditimage,smexplorer,charmap,nonbreaking,|,styleprops,attribs,|,jaretypograph,removeformat,cleanup,spellchecker,|,visualaid,fullscreen,code",
theme_advanced_buttons3 : "",
theme_advanced_buttons4 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true,
file_browser_callback : "SMPlugins",
plugin_smexplorer_directory : "{$config->subfolder}files/uploads",
plugin_smimage_directory : "{$config->subfolder}files/uploads",
setup : function(ed) {
if(typeof set_meta == 'function')
{
ed.onKeyUp.add(set_meta);
ed.onChange.add(set_meta);
}
}
{literal}}{/literal});
</script>
*}

176
simpla/design/html/user.tpl Normal file
View File

@@ -0,0 +1,176 @@
{* Вкладки *}
{capture name=tabs}
<li class="active"><a href="index.php?module=UsersAdmin">Покупатели</a></li>
{if in_array('groups', $manager->permissions)}<li><a href="index.php?module=GroupsAdmin">Группы</a></li>{/if}
{if in_array('coupons', $manager->permissions)}<li><a href="index.php?module=CouponsAdmin">Купоны</a></li>{/if}
{/capture}
{if $user->id}
{$meta_title = $user->name|escape scope=parent}
{/if}
{if $message_success}
<!-- Системное сообщение -->
<div class="message message_success">
<span>{if $message_success=='updated'}Пользователь отредактирован{else}{$message_success|escape}{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
{if $message_error}
<!-- Системное сообщение -->
<div class="message message_error">
<span>{if $message_error=='login_exists'}Пользователь с таким email уже зарегистрирован
{elseif $message_error=='empty_name'}Введите имя пользователя
{elseif $message_error=='empty_email'}Введите email пользователя
{else}{$message_error|escape}{/if}</span>
{if $smarty.get.return}
<a class="button" href="{$smarty.get.return}">Вернуться</a>
{/if}
</div>
<!-- Системное сообщение (The End)-->
{/if}
<!-- Основная форма -->
<form method=post id=product>
<input type=hidden name="session_id" value="{$smarty.session.id}">
<div id="name">
<input class="name" name=name type="text" value="{$user->name|escape}"/>
<input name=id type="hidden" value="{$user->id|escape}"/>
<div class="checkbox">
<input name="enabled" value='1' type="checkbox" id="active_checkbox" {if $user->enabled}checked{/if}/> <label for="active_checkbox">Активен</label>
</div>
</div>
<div id=column_left>
<!-- Левая колонка свойств товара -->
<!-- Параметры страницы -->
<div class="block">
<ul>
{if $groups}
<li>
<label class=property>Группа</label>
<select name="group_id">
<option value='0'>Не входит в группу</option>
{foreach from=$groups item=g}
<option value='{$g->id}' {if $user->group_id == $g->id}selected{/if}>{$g->name|escape}</option>
{/foreach}
</select>
</li>
{/if}
<li><label class=property>Email</label><input name="email" class="simpla_inp" type="text" value="{$user->email|escape}" /></li>
<li><label class=property>Дата регистрации</label><input name="email" class="simpla_inp" type="text" disabled value="{$user->created|date}" /></li>
<li><label class=property>Последний IP</label><input name="email" class="simpla_inp" type="text" disabled value="{$user->last_ip|escape}" /></li>
</ul>
</div>
<!-- Параметры страницы (The End)-->
<input class="button_green button_save" type="submit" name="user_info" value="Сохранить" />
</div>
<!-- Левая колонка свойств товара (The End)-->
</form>
<!-- Основная форма (The End) -->
{if $orders}
<div class="block" id=column_left>
<form id="list" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<h2>Заказы пользователя</h2>
<div>
{foreach $orders as $order}
<div class="{if $order->paid}green{/if} row">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$order->id}" />
</div>
<div class="order_date cell">
{$order->date|date} {$order->date|time}
</div>
<div class="name cell">
<a href="{url module=OrderAdmin id=$order->id return=$smarty.server.REQUEST_URI}">Заказ №{$order->id}</a>
</div>
<div class="name cell">
{$order->total_price}&nbsp;{$currency->sign}
</div>
<div class="icons cell">
{if $order->paid}
<img src='design/images/cash_stack.png' alt='Оплачен' title='Оплачен'>
{else}
<img src='design/images/cash_stack_gray.png' alt='Не оплачен' title='Не оплачен'>
{/if}
</div>
<div class="icons cell">
<a href='#' class=delete></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id='check_all' class='dash_link'>Выбрать все</label>
<span id=select>
<select name="action">
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" name="user_orders" type="submit" value="Применить">
</form>
</div>
</div>
{/if}
{* On document load *}
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', 1-$('#list input[type="checkbox"][name*="check"]').attr('checked'));
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form#list").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form#list").submit();
});
// Подтверждение удаления
$("#list").submit(function() {
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

View File

@@ -0,0 +1,184 @@
{* Вкладки *}
{capture name=tabs}
<li class="active"><a href="index.php?module=UsersAdmin">Покупатели</a></li>
{if in_array('groups', $manager->permissions)}<li><a href="index.php?module=GroupsAdmin">Группы</a></li>{/if}
{if in_array('coupons', $manager->permissions)}<li><a href="index.php?module=CouponsAdmin">Купоны</a></li>{/if}
{/capture}
{* Title *}
{$meta_title='Покупатели' scope=parent}
{* Поиск *}
{if $users || $keyword}
<form method="get">
<div id="search">
<input type="hidden" name="module" value='UsersAdmin'>
<input class="search" type="text" name="keyword" value="{$keyword|escape}" />
<input class="search_button" type="submit" value=""/>
</div>
</form>
{/if}
{* Заголовок *}
<div id="header">
{if $keyword && $users_count>0}
<h1>{$users_count|plural:'Нашелся':'Нашлось':'Нашлись'} {$users_count} {$users_count|plural:'покупатель':'покупателей':'покупателя'}</h1>
{elseif $users_count>0}
<h1>{$users_count} {$users_count|plural:'покупатель':'покупателей':'покупателя'}</h1>
{else}
<h1>Нет покупателей</h1>
{/if}
{if $users_count>0}
<form method="post" action="{url module=ExportUsersAdmin}" target="_blank">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<input type="image" src="./design/images/export_excel.png" name="export" title="Экспортировать этих покупателей">
</form>
{/if}
</div>
{if $users}
<!-- Основная часть -->
<div id="main_list">
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
<div id="sort_links" style='display:block;'>
<!-- Ссылки для сортировки -->
Упорядочить по
{if $sort!='name'}<a href="{url sort=name}">имени</a>{else}имени{/if} или
{if $sort!='date'}<a href="{url sort=date}">дате</a>{else}дате{/if}
<!-- Ссылки для сортировки (The End) -->
</div>
<form id="form_list" method="post">
<input type="hidden" name="session_id" value="{$smarty.session.id}">
<div id="list">
{foreach $users as $user}
<div class="{if !$user->enabled}invisible{/if} row">
<div class="checkbox cell">
<input type="checkbox" name="check[]" value="{$user->id}"/>
</div>
<div class="user_name cell">
<a href="index.php?module=UserAdmin&id={$user->id}">{$user->name|escape}</a>
</div>
<div class="user_email cell">
<a href="mailto:{$user->name|escape}<{$user->email|escape}>">{$user->email|escape}</a>
</div>
<div class="user_group cell">
{$groups[$user->group_id]->name}
</div>
<div class="icons cell">
<a class="enable" title="Активен" href="#"></a>
<a class="delete" title="Удалить" href="#"></a>
</div>
<div class="clear"></div>
</div>
{/foreach}
</div>
<div id="action">
<label id="check_all" class="dash_link">Выбрать все</label>
<span id=select>
<select name="action">
<option value="disable">Заблокировать</option>
<option value="enable">Разблокировать</option>
<option value="delete">Удалить</option>
</select>
</span>
<input id="apply_action" class="button_green" type="submit" value="Применить">
</div>
</form>
<!-- Листалка страниц -->
{include file='pagination.tpl'}
<!-- Листалка страниц (The End) -->
</div>
{/if}
<!-- Меню -->
<div id="right_menu">
<ul>
<li {if !$group->id}class="selected"{/if}><a href='index.php?module=UsersAdmin'>Все группы</a></li>
</ul>
<!-- Группы -->
{if $groups}
<ul>
{foreach $groups as $g}
<li {if $group->id == $g->id}class="selected"{/if}><a href="index.php?module=UsersAdmin&group_id={$g->id}">{$g->name}</a></li>
{/foreach}
</ul>
{/if}
<!-- Группы (The End)-->
</div>
<!-- Меню (The End) -->
{literal}
<script>
$(function() {
// Раскраска строк
function colorize()
{
$("#list div.row:even").addClass('even');
$("#list div.row:odd").removeClass('even');
}
// Раскрасить строки сразу
colorize();
// Выделить все
$("#check_all").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', 1-$('#list input[type="checkbox"][name*="check"]').attr('checked'));
});
// Удалить
$("a.delete").click(function() {
$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
$(this).closest("form").submit();
});
// Скрыт/Видим
$("a.enable").click(function() {
var icon = $(this);
var line = icon.closest(".row");
var id = line.find('input[type="checkbox"][name*="check"]').val();
var state = line.hasClass('invisible')?1:0;
icon.addClass('loading_icon');
$.ajax({
type: 'POST',
url: 'ajax/update_object.php',
data: {'object': 'user', 'id': id, 'values': {'enabled': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
success: function(data){
icon.removeClass('loading_icon');
if(state)
line.removeClass('invisible');
else
line.addClass('invisible');
},
dataType: 'json'
});
return false;
});
// Подтверждение удаления
$("form").submit(function() {
if($('#list input[type="checkbox"][name*="check"]:checked').length>0)
if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
return false;
});
});
</script>
{/literal}

Binary file not shown.

After

Width:  |  Height:  |  Size: 712 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 791 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Some files were not shown because too many files have changed in this diff Show More