Как устроен механизм лендингов внутри
Механизм лендов позволяет практически не использовать стили от платформы.
Сам лендинг - это обычная страница, содержимое которой загружается на основе выходных данных из процедуры lng_getLanding (ее менять в проекте не нужно, т.к. изменения могут затереться при обновлении механизма лендов).
Тело страницы ленда с комментариями:
<meta charset="utf-8">
<!-- Манифест для PWA -->
<link rel="manifest" href="/manifest.webmanifest" crossorigin="use-credentials">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- SEO данные, котоорые берутся из SP параметров - на основе данных из процедуры getLanding -->
<title>{sp-seoTitle}</title>
<meta content="{sp-seoDescription}" name="description">
<meta content="{sp-seoKeywords}" name="keywords">
{sp-favicon}
<!-- falcon styles - они нужны для вывода компонентов платформы --->
<link rel="stylesheet" href="/content/modules/as.css">
<link rel="stylesheet" href="/content/modules/as.crud2.css?v=2">
<!-- глобальный CSS от платформы (задается в настройках /settings ) -->
<link rel="preload" as="style" href="/controls/resource/getfile?code=globalcss" onload="this.rel='stylesheet'">
<!-- подключение bootstrap 4 и иконок -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="/content/sb-admin/vendor/fontawesome-free/css/all.min.css">
<style type="text/css">
.as-lnd-section{position: relative;}
</style>
{sp-headSection}
<script>
/*to prevent Firefox FOUC, this must be here*/
let FF_FOUC_FIX;
</script>
{sp-text}
<!-- falcon scripts - здесь лучше ничего не убирать, иначе компоненты платформы могут не работать как необходимо --->
<script src="/content/sb-admin/vendor/jquery.min.js"></script>
<script src="/content/sb-admin/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script type="text/javascript" src="/js/jqueryplugins.min.js" charset="windows-1251"></script>
<script type="text/javascript" src="/js/basejs.min.js" charset="windows-1251"></script>
<script type="text/javascript" src="/js/basejscontrols.min.js" charset="windows-1251"></script>
<script type="text/javascript" src="/uploads/as.systemoptions.js" charset="windows-1251"></script>
{sp-signalr}
<script src="/js/falcon/pfalcon.js"></script>
<script>
$(function() {
pFalcon.init({
isDebug: false, canEdit: false,renderData: { username: '', roles: '', urlParameters: ''},
introParams: null, hintsParams: null
});
{sp-stuffScript}
});
</script>
<!-- falcon scripts --->
{sp-bodyBottomSection}
<!-- Далее идет код для работы PWA -->
<input type="hidden" class="as-enablePWANotifications" value="1">
<script>
// Check compatibility for the browser we're running this in
if ("serviceWorker" in navigator) {
if (navigator.serviceWorker.controller) {
console.log("[PWA Builder] active service worker found, no need to register");
} else {
// Register the service worker
console.log("Register the service worker...")
navigator.serviceWorker
.register("/pwabuilder-sw.js", {
scope: "./"
})
.then(function (reg) {
console.log("[PWA Builder] Service worker has been registered for scope: " + reg.scope);
});
}
}
// may be let deferredPrompt;
let deferredPrompt = null;
// вызывается только если не установлено приложение в браузере! См. chrome://apps
// $(window).on('beforeinstallprompt', function (e) {
window.addEventListener('beforeinstallprompt', function (e) {
console.log("beforeinstallprompt")
// return; Иногда влияло на Autocomplete
// Prevent Chrome 67 and earlier from automatically showing the prompt
e.preventDefault();
// Stash the event so it can be triggered later.
deferredPrompt = e;
console.log("window.deferredPrompt", e);
return false;
});
</script>
Код страницы SQL с комментариями:
CREATE PROCEDURE [dbo].[pg_crumbs_example-land]
@roles nvarchar(128),
@itemID nvarchar(128) = '',
@urlParameters CRUDFilterParameter READONLY -- коллекция (Key,Value). здесь спец параметры langID, username
AS
BEGIN
-- извлекаем код ленда из названия процедуры. ВАЖНО - здесь можно просто поставить код какого-то другого ленда.
declare @landCode nvarchar(128) = replace(OBJECT_NAME(@@PROCID), 'pg_crumbs_', '')
declare @username nvarchar(128) = (select value from @urlParameters where [key]='username')
declare @result TABLE (title nvarchar(256), link nvarchar(256), tooltip nvarchar(256),
ord int, [right] bit, customLink nvarchar(512))
declare @isCore int = iif(dbo.as_setting('isCore', '')='1', 1, 0)
declare @langID nvarchar(max) = (select top 1 Value from @urlParameters where [Key]='langID')
declare @pageCode nvarchar(max) = (select top 1 Value from @urlParameters where [Key]='pageCode')
declare @inputParameters ExtendedDictionaryParameter
insert into @inputParameters([Key], Value2)
select 'langID', @langID
union select 'itemID', @itemID
union select 'pageCode', @pageCode
-- КЛЮЧЕВАЯ ПРОЦЕДУРА, которая собирает все данные по ленду (секции, SEO данные и т.д.)
declare @p ExtendedDictionaryParameter
insert into @p([Key], Value2)
exec lnd_getLanding @code=@landCode, @enableAddingSectionCodes = 1, @username = @username, @isCore = @isCore, @parameters = @inputParameters
-- SELECT 1
select * from @result order by ord
-- SELECT 2
select 1
declare @favicon nvarchar(256) = isnull((select Value2 from @p where [key]='favicon'), '')
if(len(@favicon)=0) set @favicon = isnull(dbo.rs_resourceLink('favIcon','0',1),'/content/images/favicon.ico')
declare @globalLandBottomSection nvarchar(max) = dbo.as_setting('CommonScripts', '')
declare @globalLandHeadSection nvarchar(max) = dbo.as_setting('CommonStyles', '')
-- SELECT 3
select top 1
isnull((select Value2 from @p where [key]='text'), '') text,
isnull((select Value2 from @p where [key]='seoTitle'), '') seoTitle,
isnull((select Value2 from @p where [key]='seoDescription'), '') seoDescription,
isnull((select Value2 from @p where [key]='seoKeywords'), '') seoKeywords,
isnull((select Value2 from @p where [key]='headSection'), '') + isnull(@globalLandHeadSection, '') headSection,
isnull((select Value2 from @p where [key]='bodyBottomSection'), '') + isnull(@globalLandBottomSection, '') bodyBottomSection,
isnull((select Value2 from @p where [key]='stuffScript'), '') stuffScript,
iif(len(@favicon)>0, '', '') favicon,
@landCode landCode,
iif(@isCore=1, '',
'
') signalr
END
Примечание:
- здесь можно подлезть со параметрами в ленд (например извлечь itemID из @urlParameters и в зависимости от него проставить title, description, keywords или делать редирект в случае невалидного itemID). В секциях ленда тоже можно получить параметр itemID в процедурах секции.
- в Head и Body Bottom части страницы добавляются скрипты и стили из 2 настроек в /settings - CommonScripts, CommonStyles.
- если необходимо поменять URL у ленда, то меняем код страницы, меняем аккуратно код процедуры (чтобы он соответствовал новому коду стараницы) и ставим в строке declare @landCode ... = старый код ленда.
- для глубокой кастомизации внешнего вида важно, чтобы не было лишних стилей as.css и as.crud2.css практически не влияют на глобальные стили. Важно не тянуть в лендинг никаких других стилей. Также можно попробовать изменить версию Bootstrap в странице (для JS и CSS), но это может негативно сказаться на каких либо компонентах платформы (т.к. ее разметка написана под Bootstrap 4).
Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Google поиск по нашей документации
- Руководства
- Основа Falcon Space
- Основные компоненты
- Возможности
- Коммуникация с пользователем
- Дизайн, стилизация, юзабилити
- Лендинги Работа с лендингами (механизм Lands) Как внедрить лендинг со своим шаблоном и стилями Как сделать копию лендинга с другим адресом или перенести лендинг на другой сайт Как поменять URL у лендинга Как использовать одни и те же секции несколько раз без дублирования Как отключить секцию лендинга или менять их порядок на лендинге Как задать высоту/подложку секции лендинга Как для ленда прописать скрипты или подключить дополнительные CSS файлы, счетчики и т.д. Как максимально быстро создать лендинг на базе Falcon Space Как прописать SEO параметры для ленда Как создать свой шаблон новой секции лендинга? Как редактировать секцию лендинга Как создать новый лендинг? Где посмотреть список лендингов? Как сделать меню лендинга или меню сайта на лендах Как сделать подстановочными фавикон, seo title у лендинга Как сделать набор типовых лендингов под некие объекты (карточки товаров)? Как создать сайт полностью на лендингах? Как сделать так, чтобы PWA работал для лендингов Как переместить лендинг на главную страницу (или на любую другую) Как устроен механизм лендингов внутри
- Универсальный API
- Примеры интеграций
- Каталоги
- Навигация
- Документы
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты
- Системное администрирование
- HOWTO
- Таблицы
- Формы
- Загрузка файлов, картинок
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта