<?=ROOT_DIR?>
- путь к корневому каталогу
<?=ENGINE_DIR?>
- путь к основной папке движка
<?=THEME?>
- путь к шаблону сайта
<?=LANG?>
- возвращает язык страницы, если он не равен языку сайта по умолчанию. Пример /en, /ru
<?=CURLANG?>
- возвращает текущий язык страницы. Пример en, ru
<?=$this->dataPage['key']?>
Список ключей:
[ incr, incr_lang, user_id, tpl, login, name, lang, title, template, status, date, files[] ]
files[] массив хранящий спиcок файлов, ключи доступа:
[ name, dir, title, description ]
<?=$this->dataPage['listPost']['индекс массива']?>
Список ключей:
[ incr, incr_cat, catName, title, chpu, count, price, user_id, login, lang, tags, short_post, status, date]
Для полного вывода данных используйте $_callback функцию
<?=$this->listPosts(function($data){ print_r($data) } );?>
Список ключей:
[ incr, incr_cat, catName, title, chpu, count, price, user_id, login, lang, tags, short_post, status, date,
files[], fields[], dopFields[], category ]
files[] массив, хранящий спиcок файлов, ключи доступа:
[ name, dir ]
dopFields[] массив, хранящий спиcки значений дополнительных полей, ключи доступа:
[ incr, incr_extra, incr_post, name, description, extra_name, extra_description ]
category[] массив, хранящий категорию поста исходя и URL
Если вам внутри рздела не нужно делать забор данных вы сами это сделаете например настроив фильтр поиска внутри
раздела для этого установите значение в Список категорий -> Редактирование категории -> [Количество постов на страницу] = 0
<?=$this->dataPage['key']?>
Список ключей:
[ incr, chpu, count, price, incr_lang, user_id, login, lang, incr_cats, catName, cats, title, tags, short_post, full_post,
status, date, files[], dopFields[], tpl ]
files[] массив, хранящий спиcок файлов, ключи доступа:
[ name, dir, title, description ]
dopFields[] массив, хранящий спиcки значений дополнительных полей, ключи доступа:
[ incr, incr_extra, incr_post, name, description, extra_name, extra_description ]
incr - идентификатор основного поля < названия списка >
incr_extra - идентификатор элемента списка
<?php
$this->chain_post('prev', function($data){
echo '<a href="'.$data['full-link'].'">'.$data['title'].'</a>';
});
?>
<?=$this->outputHTML(function($tpl){$this->get($tpl);})?>
<?php
$this->listPosts(function($_data){
#$_data['files']['индекс массива'] - хранит список файлов;
#$_data['dopFileds']['индекс массива'] - хранит спиcок дополнительных полей
#$_data['cat-link'] - содержит ссылку на категорию
#$_data['full-link'] - содержит ссылку на пост
});
?>
<?php foreach( $this->listPosts() as $key=>$value ){ /* do sumthing */ } ?>
<?php
$this->tags(function($tag){
#$tag - тег
});
?>
<?php
$this->files(function($file){
#$file->name - имя файла
#$file->dir - путь к файлу
});
?>
<?php
$this->is_home(function(){
#... do something
});
?>
Пример использования:
$this->custom(['tpl'=>'custom', 'category'=>[5,3], 'lang'=>'ru', 'limit'=>5, 'order'=>['incr'=>'DESC']])
$this->_custom[]
print_r($this->_custom)
$this->_custom['cat-link'] - содержит ссылку на категорию
$this->_custom['full-link'] - содержит ссылку на пост
$this->_custom['i'] - счетчик итераций
$this->custom($options, function(&$data){} )
;
Аргумент $options может быть массивом или же функцией обратного вызова.
Список ключей:
$options[selector, total, page, maxVisible]
Примеры использования:
<?=$this->pagination(['selector'=>'.short_post'])?>
<?php $this->pagination(function($paging){
#$paging['total']
#$paging['page']
#$paging['maxVisible']});
?>
массив $options имеет следующие параметры.
<?=$this->autocomplete(['selector'=>'#autocomplete', 'minLength'=>1])?>
<?=$this->Breadcrumb(function($chain){
# chain - Раздел
})?>
<?php foreach($this->Breadcrumb() as $chain ) ?>
<?php
$this->chain_post('prev', function($data){
echo '<a href="'.$data['full-link'].'">PREV</a>';
});
?>
<?php
$this->chain_post('next', function($data){
echo '<a href="'.$data['full-link'].'">NEXT</a>';
});
?>
Пример использования:
<?php $dataPage = $this->StaticPage(['name'=>'about', 'lang'=>'ru'])); ?>
[ incr, incr_lang, user_id, tpl, login, name, lang, title, template, status, date, files[] ]
Пример использования:
<?php $this->is_cat('game', 'class="active"') ?>
<?php $this->is_cat() ?>
= вернет true если открыт любой раздел сайтаПример использования:
<?php $this->getPostData(['incr'=>1, 'lang'=>'ru']) ?>
Пример использования:
<?php $this->is_cats_post(['incr'=>1, 'incr_cats'=>['1','2']]) ?>
Пример использования:
<?php $this->findSubCat(['incr_cats'=>[2,3,4], 'incr_parent'=>1]]) ?>
Пример использования:
<?php $this->friends(['user_id'=>1, 'status'=>'active']]) ?>
Пример использования:
<?php $this->TextMessages( 'type'=>'post', 'pkey'=>1, 'tpl'=>'comments',
'selector-data'=>'.data-messages', 'limit'=>20, 'order'=>'incr DESC',
['pagination'=>['selector'=>'.text_messages', 'limit_output'=>5],
'done'=>'$("._showText").click(function(){
$(this).parent().find("._textHide").show();
$(this).hide();
});'
]); ?>
$_callback = функция обратного вызова для обработки сообщений, работает только если пагинация не активирована.
Параметры:
<?php
$this->postFullSearch([
'pagination'=>[
'selector'=>'.post-search',
'limit_output'=>10
],
'fields'=>['incr','title', 'date'],
'conf'=>'_conf',
'func'=>'setPostFilter',
'data-selector' =>'.dataFind',
'inner-selector' =>'.num_rows',
'tpl'=>'dataFind',
'limit'=>40,
'order'=>['incr'=>'DESC'],
'group'=>'incr',
'where'=> ['_name'=>'dev']
'debug'=>'1'
'done'=>''
]);
?>
$_callback = функция обратного вызова для обработки сообщений, работает только если пагинация не активирована.
<div class="dataFind">
<?php
$this->postFullSearch([
'pagination'=>[
'selector'=>'.post-search',
'limit_output'=>10
],
'conf'=>'_conf',
'func'=>'setPostFilter',
'data-selector' =>'.dataFind',
'inner-selector' =>'.num_rows',
'tpl'=>'dataFind',
'order'=>'incr DESC',
'group'=>'incr',
]);
?>
</div>
<div class="<?=$options['innerClass']?>" data-total="<?=$options['total']?>">
<?php foreach($options['data'] as $_data): ?>
<?php endforeach; ?>
</div>
<script>
_conf['where'] = { 'title[~]': 'test' };
setPostFilter();
</script>
Пример использования:
<?php $this->subPosts(['incr_post'=>1, 'lang'=>'ru']]); ?>
Пример использования:
<?php $this->retranslate('ru'); ?>
Пример использования:
<?=$this->moreData(['tpl'=>'more', 'selectorData'=>'#content_more', 'selectorEvent'=>'#objEvent', 'begin'=>0, 'category'=>[2, 37, 171, 446], 'limit'=>[0, 5], 'order'=>['incr'=>'DESC'],
'before'=>function(){
// do sumhing
},
'after'=>function(){
echo 'if(_status == "no-data"){
// do sumhing
}';
}
])?>
$this->_custom[]
print_r($this->_custom)
$this->_custom['cat-link'] - содержит ссылку на категорию
$this->_custom['full-link'] - содержит ссылку на пост
$this->_custom['i'] - счетчик итераций
Пример использования ($arr['files'] должен содержать массив с ключом dir для каждого элемента):
<?=$this->getFile(['files'=>$arr['files'], 'type'=>'big'])->dir?>
Альтернативный пример использования:
<?=$this->getFile(['files'=>$arr['files'], 'type'=>'big'], true)['dir']?>
Пример использования:
<?=$this->getCurrency($sign)['Доступный ключ данных']?>
Пример использования:
<?=$this->getCurrency(['sign'=>'$', 'money'=>28, 'round'=>2])?>
Пример использования:
<?=$this->is_chpu(['chpu'=>['contect', 'about'], 'val'=>'<h1>WORK WORK Value</h1>', 'do'=>'<h1>DONT FIND!</h1>' ]);?>
Второй пример использования:
<?=$this->is_chpu(['chpu'=>['contect'=>'<h1>YES GOOD</h1>', 'about'=>'ITS WORK'], 'do'=>'<h1>DONT FIND!</h1>' ]);?>
В данном примере значение устанавливается непосредственно на ЧПУ без использования ключа [ val ]
Пример использования:
<?php $this->getSubCats($incrParent); ?>
Пример использования:
<?=$this->getLink(['incr_parent'=>40, 'incr_cats'=>[474, 477, 461]]);?>
Пример использования:
<?=$this->getCatData(['incr_cats'=>[1,2,3]]));?>
Пример использования:
<?php if($this->is_groupPage(['incr'=>1])) { /* do sumthing */ } ?>
Пример использования:
<?=$this->getCatTree(['parent'=>function($key, $cat, $next){
return '<li>'.$key.'<ul>'.$next.'</ul> </li>';
},
'child'=>function($key, $cat){
return '<li>'.$key.'</li>';
}
, 'from'=>'catName', 'to'=>'catName']); ?>
Пример использования:
<?=$this->hasGroupPostAccess($incrGroup, $_SESSION['id']);?>
Пример использования:
<?=$this->genPagination(['prev'=>2, 'count'=>10]) ;?>
Пример использования:
<?=$this->groupFiles($this->dataPage['files']) ;?>
Пример использования:
<?=$this->filterDopFields($data['dopFields'], ['incr_general'=>1]) ;?>
$.post('/ajax-data-handler', { 'ajaxKeyActions': 'selectData',
'data': JSON.stringify({
'table': 'v_wst_short_posts',
'fields': ['incr', 'chpu', 'status'],
'condition': { 'where': { 'title[~]': _title } }
}),
},
function(data){
var _data = JSON.parse(data);
console.log(_data);
}
);
table - имя таблици бд
fields - массив столбцов бд
condition - позволяет задать все возможные условия для выбора данных например ORDER, GROUP, LIMIT, забор данных идет с помощю
medoo.in. На выходе мы получем масив данных data.
Пользователь в группе (контент менеджер) - имеет ограниченный доступ к запросу данных.
$.post('/ajax/index.php', { 'keyActions': 'get-cities', 'incr_country': 1 },
function(data){
var _data = JSON.parse(data);
// do something
}
);
incr_country - уникальный идентификатор страны
$.post('/ajax/index.php', { 'keyActions': 'get-delivery-department', 'incr_city': 1 },
function(data){
var _data = JSON.parse(data);
// do something
}
);
incr_city - уникальный идентификатор горада
Документация по работе с данным Framework http://medoo.in/doc
Чтобы работать с БД в модулях используйте эклампляр класа $db, для работы в шаблоне используйте $this->db
Для работы корзины нужно подключить jquery.cookie.js путь к файлу /includes/js/jquery.cookie.js. Вы можете скопировать его в папку шаблона и после подключить так будет удобней. Сам шаблон корзины shipping_cart.tpl лежит почти там же путь /includes/shipping_cart.tpl его тоже лучше скопировать в папку с шаблоном сайта. В шаблоне внутри указан style который для удобства будет лучше перенести в общий файл со стилями но решать вам, обработка событий javascript находиться в самом низу файла. Страничку с корзиной удобней всего сделать через статическую страницу указав ей нужный шаблон например shipping_cart.tpl, хотя шаблон вы можете переименовать как хотите.
$('.add-to-cart').click(function(){ var keyProduct = 'product_'+$(this).attr('data-product'), keyCount = 'countProduct'; $(this).text(''); $(this).addClass('icon-check'); if(!$.cookie(keyProduct)){ $.cookie(keyProduct, 1, { path: '/' }); if(!$.cookie(keyCount)){ $.cookie(keyCount, 1, { path: '/' }); }else { $.cookie(keyCount, (parseInt($.cookie(keyCount))+1), { path: '/' }); } $('.shipping-cart__counter').html($.cookie(keyCount)); } });
<a data-product="552" class="btn btn-blue add-to-cart">В корзину</a>
Перемнные [keyProduct - идентификатор продукта, keyCount - количество товаров в корзине] их лучше не менять поскольку потом прийдеться переписывать настройки во всех местах.
$(this).text('');
$(this).addClass('icon-check');Данное действие заменяет слово [В корзину] и добавляет на элемент класс icon-check это создано чтобы пользователь мог видеть какой товар он добавил в корзину на текущей странице. К примеру на класс icon-check можно применить с помощью стиля картинку информирующею что товар уже добавлен в корзину.
$('.shipping-cart__counter').html($.cookie(keyCount));Добавляет номерок количества товаров в корзине к элементу с классом shipping-cart__counter Обязательно подключить инициализаторы кнопок
$('.shipping__total-wrap .btn').click(function(){ $('.shipping').hide(); $('.shipping-form').show(); return false; }); $('#back.back').click(function(){ $('.shipping').show(); $('.shipping-form').hide(); return false; });
Для вывода формы регистрации нужно в шаблоне в нужном месте вызвать функцию
<?=$this->get('{registration-form}')?>
Сам шаблон регистрации находиться по пути /includes/registration-form.tpl
В системе должно быть создано два дополнительных шаблона для регистрации пользователя если активирована система активации аккаунта.
Для настройки редакторы создайте в корне шаблона вашего сайта файл с имененм wst-summernote-config.js
Пример кода настройки для файла wst-summernote-config.js, более подробные настройки смотрите на сайте разработчика.let _summernoteConfig_ = { lineHeights: ['0.1', '0.2', '0.3', '0.4', '0.5', '0.6', '0.8', '1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'], toolbar: [ ['style', ['style']], ['font', ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'clear']], ['fontname', ['fontname']], ['fontsize', ['fontsize']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['height', ['height']], ['table', ['table']], ['insert', ['link', 'video', /*'picture',*/ 'hr']], ['view', ['fullscreen', 'codeview']], ['help', ['help']] ], fontNames: ['Arial', 'Arial Black', 'Tahoma', 'Violet'], fontSizes: ['8','9','10','11','12','13','14','16','18','20','22','24','26','28','36','48','72'], height: 400, tabsize: 2, codemirror: { theme: 'monokai' }, callbacks: { onInit: function() { $(this).summernote('lineHeight', 0.2); $(this).summernote('fontSize', 14); } } }
<?=$_data['title']?>-<?=$_data['date']?>