Настройки системы

Введение

В системе есть различный уровень настроек:

Раздел Системный SQL (/sysSP)

Находится в меню "Система" -> "Системный SQL". Основные характеристики:

Раздел  Общие настройки /settings

Находится в меню "Настройки". Основные характеристики:

Как изменить элементы Layout (настройки GetLayoutInfo)

Для этого необходимо изменить процедуру falcon_getLayoutInfo в разделе Системные элементы/Системный SQL

Параметры процедуры: 

Общий вид процедуры:

CREATE PROCEDURE [dbo].[falcon_getLayoutInfo]
	@url nvarchar(256),
	@username nvarchar(128),
	@langID int = 0,  -- 111,
    @parameters ExtendedDictionaryParameter READONLY	
AS
BEGIN
	declare @userGuid uniqueidentifier = (select top 1 try_cast(Value as uniqueidentifier) 
                                          from @parameters where [Key] = 'falconGuid')
   
    declare @disableSlideoutMenu bit = 0
    
	declare @isAdmin bit = dbo.sec_isUserInRole(@username, 'admin')
	declare @lang nvarchar(20) = ''
    
      
	declare @footer nvarchar(max) = [dbo].as_htmlBlockLang ('footer', @langID)
    declare @mobileFooter nvarchar(max) = [dbo].as_htmlBlockLang ('mobileFooter', @langID)
    
     
	declare @topNavbarText nvarchar(max) = [dbo].as_htmlBlockLang ('topNavbarText', @langID)
	declare @topPageText nvarchar(max) = [dbo].as_htmlBlockLang ('topPageText', @langID)
	declare @customHeader nvarchar(max) = [dbo].as_htmlBlockLang ('customHeader', @langID)
	declare @topSubMenuText nvarchar(max) = [dbo].as_htmlBlockLang ('topSubMenuText', @langID)
	declare @topSubMenuTitle nvarchar(max) = [dbo].as_htmlBlockLang ('topSubMenuTitle', @langID)
	     
    declare @topMakeup nvarchar(max) = [dbo].as_htmlBlockLang ('topMakeup', @langID)
	declare @topMobileMakeup nvarchar(max) = [dbo].as_htmlBlockLang ('topMobileMakeup', @langID)
	declare @customMetaTags nvarchar(max) = [dbo].as_htmlBlockLang ('customMetaTags', @langID)
	  
    declare @enableLang bit = iif(dbo.as_setting('enableLang', '')='True',1, 0)
	declare @enablePWA bit = iif(dbo.as_setting('enablePwa', '')='True',1, 0)
	declare @enableGeolocation bit = iif(dbo.as_setting('enableGeolocation', '')='True',1, 0)
	declare @geolocationKey nvarchar(128) = dbo.as_setting('geolocationKey', '')
	declare @saveGeoposition bit = iif(dbo.as_setting('saveGeoposition', '')='True',1, 0)
	declare @helpChatKey nvarchar(128) = dbo.as_setting('helpChatKey', '')
	declare @fixWidth bit = iif(dbo.as_setting('fixWidth', '')='True',1, 0)
	
      
    declare @dateFormat nvarchar(128) = dbo.as_setting('dateFormat', 'dd.mm.yyyy')
	declare @phoneFormat nvarchar(128) = dbo.as_setting('phoneFormat', '+7 (ddd) ddd-dddd')
	declare @linkPrefix nvarchar(128) = dbo.as_setting('linkPrefix', '5')
	declare @userPicLabel nvarchar(128) = iif(dbo.as_setting('showLogin', '')='True', @username, '')
	
    
    declare @enableAnimation bit = try_cast(dbo.as_design_getSetting('enableAnimation', '0') as bit), 
		@horizontalMainMenu bit = try_cast(dbo.as_design_getSetting('horizontalMainMenu', '0') as bit), 
        @theme nvarchar(128)  = dbo.as_design_getSetting('theme', '')
	declare @round nvarchar(32) =  dbo.as_design_getSetting('round', '')
	declare @roundClass nvarchar(32) = iif(@round='round', 'as-round', iif(@round='unround', 'as-unround', ''))

	-- SELECT 1 - LAYOUT SETTINGS
	select	
     		@theme  theme,  --@theme
    		isnull((select top 1 Value from as_settings where Code = 'Brand'),  'Falcon Auction') brand, 
            isnull(dbo.rs_resourceLink('siteLogo','0',1),'') LogoIcon,
            isnull(dbo.rs_resourceLink('favIcon','0',1),'/content/images/favicon.ico') favicon,           
    		@topNavbarText TopNavbarText,
            @topPageText topPageText,
            @topMakeup topMakeup,
            @topMobileMakeup topMobileMakeup,
            @customMetaTags customMetaTags,
    		@roundClass + ' ' + iif(@horizontalMainMenu=1, 'as-horizontalMainMenu', '') + 
            	iif(@disableSlideoutMenu=1, ' as-disableSlideoutMenu ', '' ) bodyClass,  -- as-disableSlideoutMenu
			'' leftFooterText,
			'' rightFooterText,
			@footer Footer,
            @mobileFooter mobileFooter,
            @customHeader customHeader,
            @topSubMenuText topSubMenuText,
            @topSubMenuTitle topSubMenuTitle,
			'/user' userProfileLink,
			@enableLang  enableLang,
			@lang defaultLang,
            @enableAnimation enableAnimation,             
			@enablePWA  enablePWA,            
			1 enablePWANotifications,
			@enableGeolocation EnableGeolocation,
            @geolocationKey  GeolocationKey,
            @saveGeoposition saveGeoposition,
			iif(@isAdmin=1, '0cebbe5e-7884-4c41-b09a-4c1dcbabeff7', @helpChatKey) HelpChatKey,
            @fixWidth fixWidth,
 			'' leftSidebar,
			iif(@username='',1,0) HideLeftCol,  -- 
			1 MainMenuInRightSidebar, 			
			'' BalanceSum,
			'' BalanceIcon,  -- fa-money-bill-alt
			'' BalanceLink,
			'' BalanceText,
			0 HorizontalMenuOnTop,
			0 BreadcrumbOnTop,        	
        	iif(@isAdmin=1,1,0) showSearch,
         	@dateFormat dateFormat,
         	@phoneFormat phoneFormat,
            1 DisableCart,
         	'http://schema.org/WebPage' SchemaTypeBody,
            '2x' alertIcon,
             @linkPrefix linkPrefix,
             @userPicLabel userPicLabel
          
	--SELECT 2 - TOP HORIZONTAL MENU 
	select 1 -- id Id, '' Name, '' Title, '' Url, 'fa fa-cogs' CssClass, 0 isActive, 0 ParentID 

	declare @select3 table (type nvarchar(max), title nvarchar(max), code nvarchar(max), itemID nvarchar(max), icon nvarchar(max),
                            btnText nvarchar(max), bigModal bit, FloatPanel bit, background nvarchar(max), ord int)
    insert into @select3 
    select type, title, code, itemID, icon, btnText,  bigModal, FloatPanel, background, ord  	    
    from as_layout_fastLinks 
    where dbo.sec_hasAccessByUsersRoles(@username, '', roles)=1
    --SELECT 3 FAST ADD LINKS
    select * from @select3 
    order by ord
	
    declare @select4 table (class nvarchar(max), title nvarchar(max), icon nvarchar(max), url nvarchar(max), ord int)
    insert into @select4 
    select class, title, icon, url, ord  	    
    from as_layout_stuffMenu 
    where @username <>'' and  dbo.sec_hasAccessByUsersRoles(@username, '', roles)=1
     	or @username = '' and onlyNotAuth = 1
    -- SELECT 4 STUFF MENU
	select * from @select4
    order by ord
	
    
    -- SELECT 5 MENU Labels
    /*
    select '/tickets' Url, 'fa fa-edit' Icon, '12' Value, 'light' Type, '123' Title
    union  
    select '/forms' Url, 'fa fa-edit' Icon, '' Value, 'success' Type, '123' Title
    */
    
    if(@username<> '') begin 
   		update as_users set lastVisitDate = getdate()
        where username = @username
    end 
   
END

Выходной первый select (SELECT 1) имеет следующие параметры: 

<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="author" content="FalconSpace.ru">
<meta name="theme-color" content="#cccccc">
<ul class="list-inline mt-2 text-center">
    <li class="list-inline-item px-3"><a href="#" title=""><i class="fa fa-2x fa-cube"></i></a></li>
    <li class="list-inline-item px-3"><a href="#" title=""><i class="fa fa-2x fa-star"></i></a></li>
    <li class="list-inline-item px-3"><a href="#" title=""><i class="fa fa-2x fa-bars"></i></a></li>
    <li class="list-inline-item px-3"><a href="#" title=""><i class="fa fa-2x fa-fire"></i></a></li>
</ul>

 

Второй запрос в GetLayout (SELECT 2) - это горизонтальное меню.

Модель SELECT 2: 

 --SELECT 2 - TOP HORIZONTAL MENU
select 1
/*
 select id Id,
	name Name,
	'' Title, подсказка к элементу
	code Url,
	'fa fa-cogs' CssClass, класс иконки
	0 isActive,
	parentID ParentID родительский элемент(для вложенного меню)
	from as_cat_categories
 */

Если не указан 2 запрос, то меню не выводится (это меню может никак не пересекаться с as_menu и pg_pages и строиться полностью динамически).

 

Третий запрос GetLayout (SELECT 3) дает список форм быстрого добавления, которые можно открыть с любой страницы в модальном окне. 

 Для этого используем следующую модель в SELECT 3: 

 

select * from  

    (select 'form' type,'Создать страницу' Title, 'newPage' Code, '' itemID, 'fa-plus'
     Icon, 'Создать страницу' btnText, 0 bigModal,  0 Ord
     union 
     select 'sp' type, 'Процедура GetLayout' Title, 'falcon' Code,'getLayoutInfo'
     itemID,  'fa-cube' Icon, '' btnText, 1 bigModal, 6 Ord
     union 
     select 'link' type,'Очистка кеша' Title, '/controls/stuff/clearcache' Code,''
     itemID, 'fa-trash' Icon, '' btnText, 0 bigModal,  500 Ord) t
     union 
     select 'formcont' type,'' Title, 'newPage' Code,'123'
     itemID, '' Icon, '' btnText, 0 bigModal,  500 Ord) t
Order by ord

 

При Type = form вызывается модальная форма 

При Type = formcont прямо в панели показывается форма (для малых форм)

Работа с формами

При Type = table вызывается таблица в модальном окне 

Работа с таблицами

При Type = link кнопка будет работать как ссылка и переходить по адресу, указанному в поле Code. 

При Type = sp кнопка будет работать как компонент изменения хранимой процедуры (компонент as-sp-link). 

При этом в Code указывается первая часть (data-control), в itemID указывается вторая часть (data-entity) и в btnText указывается 3 часть наименования хранимой процедуры (data-operation).

Примечание:

1. если при этом не нужен SELECT 2, то вместо него можно просто поставить Select '1'

2. Если нужно скрыть определенную ссылку, то можно установить type = '' 

3. Можно задать фон элемента через параметр background (bootstrap цвета - info, danger, warning и т.д.)

4. floatPanel =1 у ссылки помещает ее в плавающую панель иконок справа 

Четвертый запрос GetLayout (SELECT 4) определяет что будет выводиться пользователю в служебном меню справа (при нажатии на иконку пользователя).



-- SELECT 4 STUFF MENU

if(@username='admin') begin

  select * from  

   (select '' Class,'Мой профиль' Title, 'fa-user' Icon, '/user' Url, 0 Ord
    union 
    select '' Class,'Сменить пароль' Title, 'fa-key' Icon,
           '/admin/account/changepassword' Url, 1 Ord
    union 
    select '' Class,'Выход' Title, 'fa-sign-out-alt' Icon,
           '/account/logoff' Url, 2 Ord) t

    Order by ord 

  end else begin 

  select * from  

    (select '' Class,'Войти' Title, 'fa-user' Icon, '/account/login' Url, 0 Ord) t

  Order by ord 

end 

Примечание. Быстрые ссылки из SELECT 4 доступны через горячие клавиши Ctrl + Alt + [Num]

Пятый запрос GetLayout (SELECT 5) определяет лейблы, которые выводятся у пунктов меню.

select '/tickets' Url, 'fa fa-edit' Icon, '12' Value, 'light' Type, '123' Title
union
select '/forms' Url, 'fa fa-edit' Icon, '' Value, 'success' Type, '123' Title

По Url мы находим пункт меню и добавляем в него элемент с иконкой Icon, справа от иконки значение Value. Стиль подложки задает Type (secondary, light, success и т.д.)

Шестой запрос GetLayout (SELECT 6) содержит вызов внешних действий (отправка почты, телеграм и т.д.)

 

Настройки appsettings (web.config)

Это специальные системные настройки, которые хранятся в конфигурационном файле веб-проекта в разделе appSettings. В core версии платформы, эти настройки хранятся в файле appsettings.json

HotLinkRegexFilter": [
"/uploads/(.*)"
],
"HotLinkRegexFilterDomain": "localhost"

Настройки кеширования 

В системе некоторые объекты кешируются на уровне сервера: 

Корневой префикс всех ключей кеша - as_ 

Вручную очистить кеш можно в разделе Настройки. 

Если необходимо чистить кеш после некоего действия в форме - используйте внешнее действие clearcache

select 'clearcache' type, 'as_' prefix

Дополнительные настройки через class для body

В GetLayout вы можете установить класс для тега body. Он может иметь некоторые значения для настроек: 

Настройки Frontend в JS файле

Некоторые настройки вынесены в файл /uploads/as.systemOptions.js. Они управляют отдельными деталями работы frontend. 

var as = as || {};

as.systemOptions = {
    "alert.alwaysHidePrev": false, // если true, то при появлении нового алерт будут скрываться все предыдущие
    "alert.disableProgress": false,  // скрывать в alert окне progress bar элемент
    "alert.defaultDelay": 7000,   // длительность по умолчанию для alert
    "alert.placement": "center",  // расположение окна алерт (center, leftBottom, leftTop, rightBottom). По умолчанию - справа наверху.
    "alert.defaultDelay": 7000, // задержка окна alert по умолчанию
    "alert.disableTimestamp":false, // настройка в as.systemOption.js - если true, то отключает показ метки времени в окошках alert
     "alert.headerIcon": "/uploads/1.png",  // путь к иконке для вывода в заголовке окна alert

    "copy.enableSourceAdding": true, // если true - то при копироовании текста с сайта будет идти добавка в текст.
    "copy.container": "", // указывает селектор контейнера, в рамках которого добавляется прибавка текста при копировании
    "copy.disableCopy": false, // если true - то при копировании текста через Ctrl + C не будет ничего скопировано в буфер обмена

    "form.disableMaxlengthInput": false, // отключить для полей с maxlength отображение остатка
    "form.spinnerIcon": "fa-spinner fa-spin", // иконка загрузки формы
    "form.progressDelay": 1000,  // delay for progress trigger field change
    "form.checkFieldDelay": 1500, // delay перед отправкой запроса по изменению поля.
    "form.updateDependentColsDelay": 200, // озадержка в мс перед срабатыванием триггера Зависимых колонок
    "form.resultContClasses": "p-3 my-3 text-muted shadow-sm border d-flex justify-content-between", // классы окна результата при сохранении форм
    "form.ctrlEnterForm": "founderror", // форма которая будет показываться при ctrl enter (с обработкой выделенного текста)
    
    "entity.statusColorStyle": "border: solid 1px {0}",  // задает стиль статуса Сущности {0} - #color
    "entity.actionColorStyle": "background-color: {0}", // задает стиль кнопки дейсвтия {0} - #color

    "disableDebugMode": false, // возможность отключить показ отладочных сообщений в консоли браузера

    "doubleRequests.disableCheck": false, // отключить контроль количества одинаковых запросов на странице
    "doubleRequests.count": 3, // порог по количеству запросов, после которого будет идти уведомление в trace с кодом dblreq
    "doubleRequests.countLimit": 4, // после превышения данного порога запрос будет отбрасываться и выводиться сообщение юзеру
    "doubleRequests.duration": 2000, // длительность в течение которого учитывается количество запросов (в миллисекундах)
    "imageCheckboxDefaultImage": "https://demo.web-automation.ru/uploads/fire.gif",  // поле формы imageCheckbox - картинка по дефолту
    "imageCheckboxDefaultWidth": "50px", // поле формы imageCheckbox - ширина по дефолту
    "imageCheckboxDefaultHeight": "50px", // поле формы imageCheckbox - высота по дефолту
    "menu.animateIcon": "faa-tada", // установить формат анимации иконок меню при наведении (варианты - https://l-lin.github.io/font-awesome-animation/)
    "menu.side": "right", // где выводится меню на мобильных устройствах - left.right
    "menu.disableSlideout": false, // если true, то не будет работать swipe для меню.
    "modal.headerBack": "danger",  // цвет верхней полоски в модальном окне
    "modal.bodyBack": "warning",   // цвет тела модального окна
    "modal.footerBack": "success", // цвет нижней части модального окна.
    "modal.enablePrevNextModal": false, // если true, то в модальном окне будут показаны кнопки перехода назад/вперед (переключение по истории показа модальных окон)
 "modal.changePageTitleWithModal": true, // если true то при открытии окна будет меняться title страницы (при закрытии возвращать начальное значение)
   "online.disableCheck": false, // если true - то не будет проверяться статус онлайн юзер или нет (as-online)
    "online.period": 30000, // через сколько миллисекунд опрашивать сервер о статусе юзера (онлайн или нет)
    "table.removeIcon": "far fa-trash-alt",// иконка удаления в таблице
    "table.commentIcon": "fa-comment", // иконка коммента в таблице
    "table.defaultTheme": "light", // тема для таблиц по умолчанию
    "table.instantFilterDelay": 1500,  // задержка в мс при срабатывании InstantFilter
    "table.subPlus": "fa-caret-right",  // иконка для свернутого состояния sub
    "table.subMinus": "fa-caret-down",// иконка для развернутого состояния sub
    "timestamp.secNow":10, // кол-во секунд, в течениие которых временная метка выводится как "только что" 
"table.mobCardsHorizontal": true, // если true то строки таблицы в моб будут идти как карточки со скроллингом вправо.
    "search.delay": 3000,  // через сколько мс начнет запускаться глобальный поиск
    "search.minLength": 5, // кол-во символов в поиске  с которого запускается поиск
    "switch.defaultWidth": "150px", // ширина переключателя по умолчанию 
"system.excludeExceptions": /Client Closed Request|1111/g, // какие JS ошибки не логировать
    "system.slowRequestLimitMs": 700, // если больше этого порога в мс, то Ajax запрос будет логироваться в trace с кодом slow
    "system.disableSignalR": false, // если true то будет отключен механизм signalR (уведомления с сервера на клиент о некоторых событиях)
"system.disableScrollEvent": false, // если true то событие onscroll будет отключено (для отладки ситуаций, когда зависает страница при скрролле).
"system.persistGeoPosition": false, // если true, то в куки geoLat, geoLng будут писаться координаты lat lon при каждой загрузке страницы и обновляться каждые 10 сек. 
"system.persistGeoPositionPeriod": 10000, // период для обновления куков по гео позиции geoLat, geoLng
    "system.getIPInfoUrlFormat" : 'some url {0}', // использование внешнего API для получения данных по IP ({0} - передаваемый API). Испольуется для компонента as-ip
"system.showButtonProgressIcon": "spinner-border spinner-border-sm mx-1",  // настройка спиннера у кнопки выполнения действия (напр, сохранение формы). Если непустая,то добавляется спиннер иконка с заданным классом
    // настройки для signalR уведомления
    "notifications.alertType": "info",  // вид вид уведомления SignalR
    "notifications.alertIcon": "fa fa-bell", // иконка уведомления
    "notifications.alertDelay": 100000, // как долго будет висеть уведомление
    "notifications.alertShowUserFrom": true, // если true  - то будет показываться юзер, от которого пришло уведомление
     "notifications.sound": "", // путь к звуковому файлу - будет проигрываться при новом уведомлении
     "notification.processNotificationIcon": "far fa-check-circle"  // иконка на кнопке обработки уведомления (в панели уведомлений).
                            
}

Для использования настроек в JS разработке следует использовать функцию as.option(code, defValue)

Главные горячие клавиши

Также есть механизм HotKeys - позволяет задать комбинацию клавиш и селектор элемента, на котором сработает данная комбинация.

Дополнительные элементы настройки

Запуск периодических событий

Универсальный поиск по сайту

Настройка почты

Установка и системные требования falcon space 

Страница-источник на сайте falconspace.ru