Данный раздел предназначен специально для GetSimple CMS и посвящен различным разработкам на этом движке.
Установка CMS достаточно простая: распаковать архив в нужную папку хостинга, открыть эту папку в браузере, следовать дальнейшем инструкциям установщика движка.
Конфигурация движка находится в файле gsconfig.php, корневой директории сайта. Настройки выполняются путём изменения PHP констант файла вручную (для включения параметра необходимо убрать символ решётки #).
# define('GSLOGINSALT', 'your_unique_phrase');
# define('GSUSECUSTOMSALT', 'your_new_salt_value_here');
define('GSIMAGEWIDTH', '300');
# define('GSADMIN', 'admin');
# define('GSDEBUG', TRUE);
# define('GSDONOTPING', 1);
# define('GSNOCSRF', TRUE);
# define('GSCHMOD', 0755);
# define('GSDOCHMOD',false);
# define('GSCANONICAL', 1);
# define('GSNOUPLOADIFY', 1);
# define('GSEDITORHEIGHT', '400');
# define('GSEDITORTOOL', 'advanced');
define('GSEDITOROPTIONS', '');
# define('GSEDITORLANG', 'en');
define('GSFROMEMAIL', 'no-replay@'.$_SERVER['HTTP_HOST']);
# define('GSAUTOSAVE', 900);
# define('GSEXTAPI', 1);
setlocale(LC_ALL, 'ru_RU.UTF8', 'ru.UTF8', 'ru_RU.UTF-8', 'ru.UTF-8', 'ru_RU', 'ru');
# define('GSNOCDN', true);
# define('GSNOHIGHLIGHT', true);
# define('GSTIMEZONE', 'Europe/Moscow');
define('SUPPRESSERRORS', true);
define('GSNOAPACHECHECK', true);
define('GSNOVERCHECK', true);
# define('GSSTYLE', GSSTYLE_SBFIXED);
# define('GSSTYLE', GSSTYLEWIDE);
# define('GSSTYLE', implode(',', array(GSSTYLEWIDE,GSSTYLE_SBFIXED)));
# define('GSNOSITEMAP', true);
# define('I18N_SINGLE_LANGUAGE', true);
# define('I18N_IGNORE_USER_LANGUAGE', true);
# define('GSAUTOMETAD', true);
# define('GSMERGELANG', false);
# define('GSNOFRAME', GSBOTH);
# define('GSFORMATXML', true);
# define('GSUPLOADSLC', false);
Для использования плагинов распакуйте полученный архив в папку сайта plugins, в админ-панеле перейдите в раздел "Плагины" и включите нужный вам плагин.
<?php c_calendarMini(); ?>
Код списка событий текущего месяца (на выбранной для показа сообщений странице указывать не нужно - список там уже есть):<?php c_calendarEvents(); ?>
Ссылка на скачивание{% component_name %}
Где component_name - название компонента.<?php
global $args;
echo $args[0];
?>
И используя код:{% component_name "param 0" %}
В результате на странице будет выводиться param 0.<meta name="robots" content="noindex, nofollow">
Ссылка на скачивание$xml = exec_filter('sitemap',$xml); // patch
Код необходимо вставить между 61 и 62 строками (в i18n версии 3.2.8), перед этим:XMLsave($xml, $file);
Ссылка на скачивание<?php
/*$mainp = return_i18n_pages()['index']['title'];*/
$mainp = '<i class="pe-7s-home"></i>';
get_breadcrumbs(return_page_slug(),$mainp);
?>
Результатом выполнения будет что-то типа такого:
<ul class="breadcrumb">
<li><a href="https://example.com/" title="Главная страница"><i class="pe-7s-home"></i></a></li>
<li><a href="https://example.com/index/parent/" title="Parent">Parent</a></li>
<li class="active">Модерн</li>
</ul>
Ссылка на скачивание<?php if (function_exists('sc_mail')) { sc_mail(); } ?>
<?php if (function_exists('sc_form')) { sc_form(); } ?>
.CodeMirror, .CodeMirror-scroll {height: auto; max-height: 500px;}
Ссылка на скачивание<!-- Otzivy Start -->
<div class="product-section section pt-70">
<div class="container">
<!--div class="section-title text-center mb-50">
<h2>Отзывы о нашей работе</h2>
</div-->
<?php get_gstbook('otzyvy') // Где otzyvy - ссылка страницы, можно заменить на $slug ?>
</div>
</div>
<!-- Otzivy End -->
Ссылка на скачивание / Демонстрация<?php
GZipIt::buff_end('check', true); // Показывает уровень и название буферизации вывода
GZipIt::buff_end('GZipIt::sanitize_output'); // Сбрасывает буфер по названию с конечного уровня
/* HTML содержимое без сжатия */
GZipIt::buff_start('sanitize_output', 'GZipIt'); // Заново создает буфер по названию функции и класса
/* HTML содержимое со сжатием */
?>
Ссылка на скачивание<?php if(class_exists('opiums_contact')) opiums_contact::form(); ?>
Ссылка на скачивание / ДемонстрацияКомпоненты - это редактируемые контейнеры с кодом, которые можно добавить в шаблон темы или редактор (используя плагин DynPages). Компоненты могут содержать как обычный текст, так и HTML-теги, JS-скрипты и PHP-код. Дополнительную информацию можно посмотреть на сайте GetSimple CMS по-русски.
<style>
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,300,600);
.simpleslider {
background: #58DDAF;
color: #2a2a2a;
}
.simpleslider {
margin: 0;
padding: 0;
font-family: 'Open Sans';
}
.simpleslider h1 {
color: #fff;
text-align: center;
font-weight: 300;
}
.simpleslider #slider {
position: relative;
overflow: hidden;
margin: 20px auto 0 auto;
border-radius: 4px;
}
.simpleslider #slider ul {
position: relative;
margin: 0;
padding: 0;
height: 200px;
list-style: none;
}
.simpleslider #slider ul li {
position: relative;
display: block;
float: left;
margin: 0;
padding: 0;
width: 500px;
height: 300px;
background: #ccc;
text-align: center;
line-height: 300px;
}
.simpleslider a.control_prev, a.control_next {
position: absolute;
top: 40%;
z-index: 999;
display: block;
padding: 4% 3%;
width: auto;
height: auto;
background: #2a2a2a;
color: #fff;
text-decoration: none;
font-weight: 600;
font-size: 18px;
opacity: 0.8;
cursor: pointer;
}
.simpleslider a.control_prev:hover, a.control_next:hover {
opacity: 1;
-webkit-transition: all 0.2s ease;
}
.simpleslider a.control_prev {
border-radius: 0 2px 2px 0;
}
.simpleslider a.control_next {
right: 0;
border-radius: 2px 0 0 2px;
}
.simpleslider .slider_option {
position: relative;
margin: 10px auto;
width: 160px;
font-size: 18px;
}
</style>
<div class='simpleslider'>
<h1>Incredibly Basic Slider</h1>
<div id='slider'>
<a href='#' class='control_next'>></a>
<a href='#' class='control_prev'><</a>
<ul>
<li>SLIDE 1</li>
<li style='background: #aaa;'>SLIDE 2</li>
<li>SLIDE 3</li>
<li style='background: #aaa;'>SLIDE 4</li>
</ul>
</div>
<div class='slider_option'>
<input type='checkbox' id='checkbox'>
<label for='checkbox'>Autoplay Slider</label>
</div>
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
jQuery(document).ready(function($){
$('#checkbox').change(function(){
setInterval(function(){
moveRight();
}, 3000);
});
var slideCount = $('#slider ul li').length;
var slideWidth = $('#slider ul li').width();
var slideHeight = $('#slider ul li').height();
var sliderUlWidth = slideCount * slideWidth;
$('#slider').css({ width: slideWidth, height: slideHeight });
$('#slider ul').css({ width: sliderUlWidth, marginLeft: - slideWidth });
$('#slider ul li:last-child').prependTo('#slider ul');
function moveLeft(){
$('#slider ul').animate({
left: + slideWidth
}, 200, function(){
$('#slider ul li:last-child').prependTo('#slider ul');
$('#slider ul').css('left', '');
});
};
function moveRight(){
$('#slider ul').animate({
left: - slideWidth
}, 200, function(){
$('#slider ul li:first-child').appendTo('#slider ul');
$('#slider ul').css('left', '');
});
};
$('a.control_prev').click(function(e){
moveLeft();
e.preventDefault();
});
$('a.control_next').click(function(e){
moveRight();
e.preventDefault();
});
});
</script>
В шаблоне сайта, в предполагаемом для слайдера месте добавьте код компонента (код регистрозависим):<?php get_component('simpleslider'); ?>
Или же воспользуйтесь плагином DynPages, тогда добавьте в ваш редактор строку (код регистрозависим):{% simpleslider %}
После сохранения шаблона или статьи можно увидеть результат.<?php $mainp = 'index'; ?>
<li<?php if($item->current=='1' && $item->slug!=$mainp) echo ' class="active"'; ?>>
<a href="<?=htmlspecialchars($item->link)?>">
<?php if($item->slug==$mainp) echo '<i class="pe-7s-menu"></i> '; ?>
<?=htmlspecialchars($item->text)?>
</a>
<?php if($item->isOpen){ ?>
<ul<?php if($item->slug==$mainp) echo ' class="mega-menu"';?>><?php $item->outputChildren(); ?></ul>
<?php } ?>
</li>
menu-footer:<li><a href="<?=htmlspecialchars($item->link)?>"><?=htmlspecialchars($item->text)?></a></li>
Для кастомизации меню в заголовок и подвал сайта добавлены:<nav class="main-menu text-center"><ul><?php get_i18n_navigation(return_page_slug(),0,1,I18N_SHOW_MENU, 'menu'); ?></ul></nav>
<div class="footer-nav"><ul><?php get_i18n_navigation(return_page_slug(),0,1,I18N_SHOW_MENU, 'menu-footer'); ?></ul></div>
Результатом будет кастомизированное пользовательское меню на сайте и в подвале.Для получения прочей необходимой информацией воспользуйтесь одним из ресурсов в рунете: GetSimple CMS по-русски / Форум. Или же за рубежом: GetSimple CMS / Forum.
@import url(css/font-awesome/font-awesome.css);
@import url(css/bootstrap.css);
@import url(css/style.css);
@import url(css/responsive.css);
# Настройки WYSIWYG-редактора, раскомментируйте строчку ниже (advanced, basic or [custom config])
# define('GSEDITORTOOL', 'advanced');
# Параметры WYSIWYG-редактора
$websitefilepath = $_SERVER['DOCUMENT_ROOT'].'/data/other/website.xml';
if(file_exists($websitefilepath)) {
$currentheme = simplexml_load_file($websitefilepath, 'SimpleXMLElement', LIBXML_NOCDATA);
$currentemplate = $currentheme->TEMPLATE;
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/theme/'.$currentemplate.'/ckeditor.css'))
define('GSEDITOROPTIONS',"basicEntities:true,extraPlugins:'nbsp,youtube,html5audio,video,wenzgmap,codesnippet,codemirror,oembed', contentsCss: '/theme/".$currentemplate."/ckeditor.css'");
else define('GSEDITOROPTIONS',"basicEntities:true,extraPlugins:'nbsp,youtube,html5audio,video,wenzgmap,codesnippet,codemirror,oembed'"); # chart
}else define('GSEDITOROPTIONS',"basicEntities:true,extraPlugins:'nbsp,youtube,html5audio,video,wenzgmap,codesnippet,codemirror,oembed'"); # chart
# WYSIWYG toolbars (advanced, basic or [custom config])
define('GSEDITORTOOL', "['Bold','Italic','Underline','Strike','Subscript','Superscript','NumberedList','BulletedList','JustifyCenter','JustifyRight','JustifyBlock','HorizontalRule','Table','Link','Unlink','Anchor','Image','Blockquote','CreateDiv','PasteFromWord','Undo','Redo'],'/',['Styles','Format','FontSize','TextColor','BGColor','oembed','Video','Html5audio','Iframe','wenzgmap','CodeSnippet','RemoveFormat','Source']"); # Chart
# Язык WYSIWYG-редактора (default en), раскомменитровать строчку ниже, если хотите, чтобы язык отличался от языка, выбранного при установке CMS
# define('GSEDITORLANG', 'en');
Вопросы безопасности движка беспокоят многих. Хотя CMS и не использует базу данных, существует некий шанс попасть под атаку хакеров и потерять доступ к сайту. Ниже будут рассматриваться способы защиты сайта от взлома.
Данный файл используется веб-сервером Apache и одной из его функции служит ограничения доступа. Строка Deny from all запрещает доступ ко всем файлам и каталогам в текущей папке веб-сервера.
Файл с аналогичным функционалом, на ином языке, используется веб-сервером IIS. Для ограничения доступа к файлам можно воспользоваться следующим примерном (web.config должен находиться в корне сайта)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="RestrictDataOther" path="/data/other/*" verb="*" type="System.Web.HttpForbiddenHandler" />
</handlers>
...
</system.webServer>
</configuration>
Вышенаписанный код запрещает доступ к директории в URL /data/other/... от корня сайта, если указать path="/data/other/*.xml", то будут блокироваться все файлы с раширением xml в этой и последующих директориях.
Для включения дополнительного шифрования cookie-файлов можно воспользоваться константой GSLOGINSALT в файле конфигурации:
define('GSLOGINSALT', 'Ваш_уникальный_модификатор');
GSLOGINSALT во включенном состоянии модифицирует хэш файла cookie (сохраняется на компьютере при авторизации в админ-панеле) и затрудняя его расшифровку.
Каждый раз при установке CMS c помощью API система получает абсолютно уникальный модификатор хэша ("соль"). Использование API GetSimple не является обязательным, можно применить и собственный модификатор.
Этот модификатор ("соль"), созданный пользователем или по умолчанию, используется для защиты от XSS-атак и обеспечивает верификацию при загрузке файлов на сервер. Для включения собственного модификатора необходимо воспользоваться константой GSUSECUSTOMSALT:
define('GSUSECUSTOMSALT', 'Ваш_уникальный_модификатор_соль');
Для получения уникальных значений констант можно воспользоваться ссылкой: http://get-simple.info/api/security/.
В целях дополнительной безопасности можно изменить название папки панели управления на другое, используя константу GSADMIN в файле конфигурации:
define('GSADMIN', 'admin_ka');
Для предотвращения доступа к файлам шаблона рекомендуется в начале файла прописывать такую строку:
<?php if(!defined('IN_GS')) die(header('HTTP/1.0 404 Not Found')); ?>
При открытии файла шаблона в браузере роботом или злоумышленником, конечная сторона получит ошибку с кодом отсутствия 404 (если не произведена авторизация в панели управления).
GST AdminLock необходим для скрытия админ-панели путем добавления дополнительных данных в URL адрес (переменная=пароль).
kt block login блокирует IP-адрес на час после трех неудачных попыток ввода логина и пароля в панели управления.