提交 7485b9a2 编写于 作者: ModStart's avatar ModStart

develop

上级 118c9961
......@@ -290,13 +290,13 @@ AdminMenu::register(function () {
开发环境请打开 debug 模式,方便查看日志文件,操作方式如下:
`.env` 文件中设置 `APP_DEBUG=true`
`.env` 文件中设置 `APP_DEBUG=true`
## 📋 常见问题
我们列举了常见问题,请查看官方标准指南
[https://modstart.com/doc/qa.html](https://modstart.com/doc/qa.html)
[https://modstart.com/doc/install/qa.html](https://modstart.com/doc/install/qa.html)
如有其他问题推荐使用官方讨论交流群或在线讨论
......
......@@ -5,5 +5,5 @@ namespace App\Constant;
class AppConstant
{
const APP = 'cms';
const VERSION = '2.7.0';
const VERSION = '2.8.0';
}
......@@ -46,8 +46,5 @@ return [
'Cms' => [
'enable' => true,
],
'CmsThemeCorp' => [
'enable' => true,
],
],
];
......@@ -5,6 +5,7 @@ namespace Module\Cms\Admin\Controller;
use Illuminate\Routing\Controller;
use ModStart\Admin\Auth\AdminPermission;
use ModStart\Core\Dao\ModelManageUtil;
use ModStart\Core\Dao\ModelUtil;
use ModStart\Core\Exception\BizException;
......@@ -19,6 +20,7 @@ class BackupController extends Controller
public function index()
{
if (Request::isPost()) {
AdminPermission::demoCheck();
$input = InputPackage::buildFromInput();
$filename = $input->getTrimString('filename');
BizException::throwsIfEmpty('备份名称为空', $filename);
......
......@@ -5,6 +5,7 @@ namespace Module\Cms\Admin\Controller;
use Illuminate\Routing\Controller;
use ModStart\Admin\Auth\AdminPermission;
use ModStart\Core\Exception\BizException;
use ModStart\Core\Input\InputPackage;
use ModStart\Core\Input\Response;
......@@ -22,6 +23,7 @@ class RestoreController extends Controller
public function delete()
{
AdminPermission::demoCheck();
$input = InputPackage::buildFromInput();
$module = $input->getTrimString('module');
$filename = $input->getTrimString('filename');
......@@ -37,6 +39,7 @@ class RestoreController extends Controller
public function submit()
{
AdminPermission::demoCheck();
$input = InputPackage::buildFromInput();
$module = $input->getTrimString('module');
$filename = $input->getTrimString('filename');
......
数据备份与恢复,文章搜索
---
- 新增:CMS数据备份和恢复
- 新增:文章搜索相关功能
......@@ -6,8 +6,8 @@
"Member",
"Banner:>=1.1.0"
],
"version": "2.0.0",
"modstartVersion": ">=2.3.0",
"version": "2.1.0",
"modstartVersion": ">=2.4.0",
"author": "ModStart",
"description": "提供通用的动态模型内容管理系统",
"providers": [
......
<?php
namespace Module\CmsThemeCorp\Admin\Controller;
use Illuminate\Routing\Controller;
use ModStart\Admin\Layout\AdminConfigBuilder;
use Module\Cms\Traits\CmsSiteTemplateFillDataTrait;
class ConfigController extends Controller
{
use CmsSiteTemplateFillDataTrait;
public function index(AdminConfigBuilder $builder)
{
$builder->pageTitle('CMS商务模板');
$url = action('\\' . __CLASS__ . '@fillData');
$builder->text('CmsThemeCorp_HomeInfoLinkText', '企业介绍链接文字');
$builder->text('CmsThemeCorp_HomeInfoLink', '企业介绍链接');
$builder->display('_display', '')->content('<a href="javascript:;" data-dialog-request="' . $url . '"><i class="iconfont icon-credit"></i> 初始化演示数据</a>')->addable(true);
$builder->formClass('wide');
return $builder->perform();
}
}
<?php
/* @var \Illuminate\Routing\Router $router */
$router->match(['get', 'post'], 'cms_template_corp/config', 'ConfigController@index');
$router->match(['get', 'post'], 'cms_template_corp/config/fill_data', 'ConfigController@fillData');
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
/* Sticky Navigation */
$(function() {
var sticky = $('.sticky');
var contentOffset;
var nav_height;
if (sticky.length) {
if ( sticky.data('offset') ) {
contentOffset = sticky.data('offset');
}
else {
contentOffset = sticky.offset().top;
}
nav_height = sticky.height();
}
var scrollTop = $(window).scrollTop();
var window_height = $(window).height();
var doc_height = $(document).height();
$(window).bind('resize', function() {
scrollTop = $(window).scrollTop();
window_height = $(window).height();
doc_height = $(document).height();
navHeight();
});
$(window).bind('scroll', function() {
stickyNav();
});
function navHeight() {
sticky.css('max-height', window_height + 'px');
}
function stickyNav() {
scrollTop = $(window).scrollTop();
if (scrollTop > contentOffset) {
sticky.addClass('fixed');
}
else {
sticky.removeClass('fixed');
}
}
});
$('document').ready(function() {
var nav_height = 70;
$("a[data-role='smoothscroll']").click(function(e) {
e.preventDefault();
var position = $($(this).attr("href")).offset().top - nav_height;
$("body, html").animate({
scrollTop: position
}, 1000 );
return false;
});
});
$('document').ready(function() {
// Back to top
var backTop = $(".back-to-top");
$(window).scroll(function() {
if($(document).scrollTop() > 400) {
backTop.css('visibility', 'visible');
}
else if($(document).scrollTop() < 400) {
backTop.css('visibility', 'hidden');
}
});
backTop.click(function() {
$('html').animate({
scrollTop: 0
}, 1000);
return false;
});
});
$('document').ready(function() {
// Loader
$(window).on('load', function() {
$('.loader-container').fadeOut();
});
// Tooltips
$('[data-toggle="tooltip"]').tooltip();
// Popovers
$('[data-toggle="popover"]').popover();
// Page scroll animate
new WOW().init();
});
$("document").ready(function() {
$(".hero-carousel").owlCarousel({
items: 1,
nav: true,
navText: ["<span class='mai-chevron-back'></span>", "<span class='mai-chevron-forward'></span>"],
loop: true,
autoplay: true,
autoplayTimeout: 5000,
});
$(".team-carousel").owlCarousel({
margin: 16,
responsive: {
0: {
items: 1
},
600: {
items: 2
},
800: {
items: 3
}
}
})
$(".testimonial-carousel").owlCarousel({
responsive: {
0: {
items: 1,
margin: 16
},
768: {
items: 2,
margin: 24
},
992: {
items: 3,
margin: 24
}
}
});
});
var $grid = $('.grid');
$grid.isotope({
// options
itemSelector: '.grid-item',
layoutMode: 'fitRows'
});
$('.filterable-btn').on( 'click', 'button', function() {
var filterValue = $(this).attr('data-filter');
$(this).toggleClass('active').siblings().removeClass('active');
$grid.isotope({ filter: filterValue });
});
body.compensate-for-scrollbar {
overflow: hidden;
}
.fancybox-active {
height: auto;
}
.fancybox-is-hidden {
left: -9999px;
margin: 0;
position: absolute !important;
top: -9999px;
visibility: hidden;
}
.fancybox-container {
-webkit-backface-visibility: hidden;
height: 100%;
left: 0;
outline: none;
position: fixed;
-webkit-tap-highlight-color: transparent;
top: 0;
-ms-touch-action: manipulation;
touch-action: manipulation;
transform: translateZ(0);
width: 100%;
z-index: 99992;
}
.fancybox-container * {
box-sizing: border-box;
}
.fancybox-outer,
.fancybox-inner,
.fancybox-bg,
.fancybox-stage {
bottom: 0;
left: 0;
position: absolute;
right: 0;
top: 0;
}
.fancybox-outer {
-webkit-overflow-scrolling: touch;
overflow-y: auto;
}
.fancybox-bg {
background: rgb(30, 30, 30);
opacity: 0;
transition-duration: inherit;
transition-property: opacity;
transition-timing-function: cubic-bezier(.47, 0, .74, .71);
}
.fancybox-is-open .fancybox-bg {
opacity: .9;
transition-timing-function: cubic-bezier(.22, .61, .36, 1);
}
.fancybox-infobar,
.fancybox-toolbar,
.fancybox-caption,
.fancybox-navigation .fancybox-button {
direction: ltr;
opacity: 0;
position: absolute;
transition: opacity .25s ease, visibility 0s ease .25s;
visibility: hidden;
z-index: 99997;
}
.fancybox-show-infobar .fancybox-infobar,
.fancybox-show-toolbar .fancybox-toolbar,
.fancybox-show-caption .fancybox-caption,
.fancybox-show-nav .fancybox-navigation .fancybox-button {
opacity: 1;
transition: opacity .25s ease 0s, visibility 0s ease 0s;
visibility: visible;
}
.fancybox-infobar {
color: #ccc;
font-size: 13px;
-webkit-font-smoothing: subpixel-antialiased;
height: 44px;
left: 0;
line-height: 44px;
min-width: 44px;
mix-blend-mode: difference;
padding: 0 10px;
pointer-events: none;
top: 0;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.fancybox-toolbar {
right: 0;
top: 0;
}
.fancybox-stage {
direction: ltr;
overflow: visible;
transform: translateZ(0);
z-index: 99994;
}
.fancybox-is-open .fancybox-stage {
overflow: hidden;
}
.fancybox-slide {
-webkit-backface-visibility: hidden;
/* Using without prefix would break IE11 */
display: none;
height: 100%;
left: 0;
outline: none;
overflow: auto;
-webkit-overflow-scrolling: touch;
padding: 44px;
position: absolute;
text-align: center;
top: 0;
transition-property: transform, opacity;
white-space: normal;
width: 100%;
z-index: 99994;
}
.fancybox-slide::before {
content: '';
display: inline-block;
font-size: 0;
height: 100%;
vertical-align: middle;
width: 0;
}
.fancybox-is-sliding .fancybox-slide,
.fancybox-slide--previous,
.fancybox-slide--current,
.fancybox-slide--next {
display: block;
}
.fancybox-slide--image {
overflow: hidden;
padding: 44px 0;
}
.fancybox-slide--image::before {
display: none;
}
.fancybox-slide--html {
padding: 6px;
}
.fancybox-content {
background: #fff;
display: inline-block;
margin: 0;
max-width: 100%;
overflow: auto;
-webkit-overflow-scrolling: touch;
padding: 44px;
position: relative;
text-align: left;
vertical-align: middle;
}
.fancybox-slide--image .fancybox-content {
animation-timing-function: cubic-bezier(.5, 0, .14, 1);
-webkit-backface-visibility: hidden;
background: transparent;
background-repeat: no-repeat;
background-size: 100% 100%;
left: 0;
max-width: none;
overflow: visible;
padding: 0;
position: absolute;
top: 0;
-ms-transform-origin: top left;
transform-origin: top left;
transition-property: transform, opacity;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
z-index: 99995;
}
.fancybox-can-zoomOut .fancybox-content {
cursor: zoom-out;
}
.fancybox-can-zoomIn .fancybox-content {
cursor: zoom-in;
}
.fancybox-can-swipe .fancybox-content,
.fancybox-can-pan .fancybox-content {
cursor: -webkit-grab;
cursor: grab;
}
.fancybox-is-grabbing .fancybox-content {
cursor: -webkit-grabbing;
cursor: grabbing;
}
.fancybox-container [data-selectable='true'] {
cursor: text;
}
.fancybox-image,
.fancybox-spaceball {
background: transparent;
border: 0;
height: 100%;
left: 0;
margin: 0;
max-height: none;
max-width: none;
padding: 0;
position: absolute;
top: 0;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
width: 100%;
}
.fancybox-spaceball {
z-index: 1;
}
.fancybox-slide--video .fancybox-content,
.fancybox-slide--map .fancybox-content,
.fancybox-slide--pdf .fancybox-content,
.fancybox-slide--iframe .fancybox-content {
height: 100%;
overflow: visible;
padding: 0;
width: 100%;
}
.fancybox-slide--video .fancybox-content {
background: #000;
}
.fancybox-slide--map .fancybox-content {
background: #e5e3df;
}
.fancybox-slide--iframe .fancybox-content {
background: #fff;
}
.fancybox-video,
.fancybox-iframe {
background: transparent;
border: 0;
display: block;
height: 100%;
margin: 0;
overflow: hidden;
padding: 0;
width: 100%;
}
/* Fix iOS */
.fancybox-iframe {
left: 0;
position: absolute;
top: 0;
}
.fancybox-error {
background: #fff;
cursor: default;
max-width: 400px;
padding: 40px;
width: 100%;
}
.fancybox-error p {
color: #444;
font-size: 16px;
line-height: 20px;
margin: 0;
padding: 0;
}
/* Buttons */
.fancybox-button {
background: rgba(30, 30, 30, .6);
border: 0;
border-radius: 0;
box-shadow: none;
cursor: pointer;
display: inline-block;
height: 44px;
margin: 0;
padding: 10px;
position: relative;
transition: color .2s;
vertical-align: top;
visibility: inherit;
width: 44px;
}
.fancybox-button,
.fancybox-button:visited,
.fancybox-button:link {
color: #ccc;
}
.fancybox-button:hover {
color: #fff;
}
.fancybox-button:focus {
outline: none;
}
.fancybox-button.fancybox-focus {
outline: 1px dotted;
}
.fancybox-button[disabled],
.fancybox-button[disabled]:hover {
color: #888;
cursor: default;
outline: none;
}
/* Fix IE11 */
.fancybox-button div {
height: 100%;
}
.fancybox-button svg {
display: block;
height: 100%;
overflow: visible;
position: relative;
width: 100%;
}
.fancybox-button svg path {
fill: currentColor;
stroke-width: 0;
}
.fancybox-button--play svg:nth-child(2),
.fancybox-button--fsenter svg:nth-child(2) {
display: none;
}
.fancybox-button--pause svg:nth-child(1),
.fancybox-button--fsexit svg:nth-child(1) {
display: none;
}
.fancybox-progress {
background: #ff5268;
height: 2px;
left: 0;
position: absolute;
right: 0;
top: 0;
-ms-transform: scaleX(0);
transform: scaleX(0);
-ms-transform-origin: 0;
transform-origin: 0;
transition-property: transform;
transition-timing-function: linear;
z-index: 99998;
}
/* Close button on the top right corner of html content */
.fancybox-close-small {
background: transparent;
border: 0;
border-radius: 0;
color: #ccc;
cursor: pointer;
opacity: .8;
padding: 8px;
position: absolute;
right: -12px;
top: -44px;
z-index: 401;
}
.fancybox-close-small:hover {
color: #fff;
opacity: 1;
}
.fancybox-slide--html .fancybox-close-small {
color: currentColor;
padding: 10px;
right: 0;
top: 0;
}
.fancybox-slide--image.fancybox-is-scaling .fancybox-content {
overflow: hidden;
}
.fancybox-is-scaling .fancybox-close-small,
.fancybox-is-zoomable.fancybox-can-pan .fancybox-close-small {
display: none;
}
/* Navigation arrows */
.fancybox-navigation .fancybox-button {
background-clip: content-box;
height: 100px;
opacity: 0;
position: absolute;
top: calc(50% - 50px);
width: 70px;
}
.fancybox-navigation .fancybox-button div {
padding: 7px;
}
.fancybox-navigation .fancybox-button--arrow_left {
left: 0;
left: env(safe-area-inset-left);
padding: 31px 26px 31px 6px;
}
.fancybox-navigation .fancybox-button--arrow_right {
padding: 31px 6px 31px 26px;
right: 0;
right: env(safe-area-inset-right);
}
/* Caption */
.fancybox-caption {
background: linear-gradient(to top,
rgba(0, 0, 0, .85) 0%,
rgba(0, 0, 0, .3) 50%,
rgba(0, 0, 0, .15) 65%,
rgba(0, 0, 0, .075) 75.5%,
rgba(0, 0, 0, .037) 82.85%,
rgba(0, 0, 0, .019) 88%,
rgba(0, 0, 0, 0) 100%);
bottom: 0;
color: #eee;
font-size: 14px;
font-weight: 400;
left: 0;
line-height: 1.5;
padding: 75px 44px 25px 44px;
pointer-events: none;
right: 0;
text-align: center;
z-index: 99996;
}
@supports (padding: max(0px)) {
.fancybox-caption {
padding: 75px max(44px, env(safe-area-inset-right)) max(25px, env(safe-area-inset-bottom)) max(44px, env(safe-area-inset-left));
}
}
.fancybox-caption--separate {
margin-top: -50px;
}
.fancybox-caption__body {
max-height: 50vh;
overflow: auto;
pointer-events: all;
}
.fancybox-caption a,
.fancybox-caption a:link,
.fancybox-caption a:visited {
color: #ccc;
text-decoration: none;
}
.fancybox-caption a:hover {
color: #fff;
text-decoration: underline;
}
/* Loading indicator */
.fancybox-loading {
animation: fancybox-rotate 1s linear infinite;
background: transparent;
border: 4px solid #888;
border-bottom-color: #fff;
border-radius: 50%;
height: 50px;
left: 50%;
margin: -25px 0 0 -25px;
opacity: .7;
padding: 0;
position: absolute;
top: 50%;
width: 50px;
z-index: 99999;
}
@keyframes fancybox-rotate {
100% {
transform: rotate(360deg);
}
}
/* Transition effects */
.fancybox-animated {
transition-timing-function: cubic-bezier(0, 0, .25, 1);
}
/* transitionEffect: slide */
.fancybox-fx-slide.fancybox-slide--previous {
opacity: 0;
transform: translate3d(-100%, 0, 0);
}
.fancybox-fx-slide.fancybox-slide--next {
opacity: 0;
transform: translate3d(100%, 0, 0);
}
.fancybox-fx-slide.fancybox-slide--current {
opacity: 1;
transform: translate3d(0, 0, 0);
}
/* transitionEffect: fade */
.fancybox-fx-fade.fancybox-slide--previous,
.fancybox-fx-fade.fancybox-slide--next {
opacity: 0;
transition-timing-function: cubic-bezier(.19, 1, .22, 1);
}
.fancybox-fx-fade.fancybox-slide--current {
opacity: 1;
}
/* transitionEffect: zoom-in-out */
.fancybox-fx-zoom-in-out.fancybox-slide--previous {
opacity: 0;
transform: scale3d(1.5, 1.5, 1.5);
}
.fancybox-fx-zoom-in-out.fancybox-slide--next {
opacity: 0;
transform: scale3d(.5, .5, .5);
}
.fancybox-fx-zoom-in-out.fancybox-slide--current {
opacity: 1;
transform: scale3d(1, 1, 1);
}
/* transitionEffect: rotate */
.fancybox-fx-rotate.fancybox-slide--previous {
opacity: 0;
-ms-transform: rotate(-360deg);
transform: rotate(-360deg);
}
.fancybox-fx-rotate.fancybox-slide--next {
opacity: 0;
-ms-transform: rotate(360deg);
transform: rotate(360deg);
}
.fancybox-fx-rotate.fancybox-slide--current {
opacity: 1;
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
/* transitionEffect: circular */
.fancybox-fx-circular.fancybox-slide--previous {
opacity: 0;
transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
}
.fancybox-fx-circular.fancybox-slide--next {
opacity: 0;
transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
}
.fancybox-fx-circular.fancybox-slide--current {
opacity: 1;
transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
}
/* transitionEffect: tube */
.fancybox-fx-tube.fancybox-slide--previous {
transform: translate3d(-100%, 0, 0) scale(.1) skew(-10deg);
}
.fancybox-fx-tube.fancybox-slide--next {
transform: translate3d(100%, 0, 0) scale(.1) skew(10deg);
}
.fancybox-fx-tube.fancybox-slide--current {
transform: translate3d(0, 0, 0) scale(1);
}
/* Styling for Small-Screen Devices */
@media all and (max-height: 576px) {
.fancybox-slide {
padding-left: 6px;
padding-right: 6px;
}
.fancybox-slide--image {
padding: 6px 0;
}
.fancybox-close-small {
right: -6px;
}
.fancybox-slide--image .fancybox-close-small {
background: #4e4e4e;
color: #f2f4f6;
height: 36px;
opacity: 1;
padding: 6px;
right: 0;
top: 0;
width: 36px;
}
.fancybox-caption {
padding-left: 12px;
padding-right: 12px;
}
@supports (padding: max(0px)) {
.fancybox-caption {
padding-left: max(12px, env(safe-area-inset-left));
padding-right: max(12px, env(safe-area-inset-right));
}
}
}
/* Share */
.fancybox-share {
background: #f4f4f4;
border-radius: 3px;
max-width: 90%;
padding: 30px;
text-align: center;
}
.fancybox-share h1 {
color: #222;
font-size: 35px;
font-weight: 700;
margin: 0 0 20px 0;
}
.fancybox-share p {
margin: 0;
padding: 0;
}
.fancybox-share__button {
border: 0;
border-radius: 3px;
display: inline-block;
font-size: 14px;
font-weight: 700;
line-height: 40px;
margin: 0 5px 10px 5px;
min-width: 130px;
padding: 0 15px;
text-decoration: none;
transition: all .2s;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
}
.fancybox-share__button:visited,
.fancybox-share__button:link {
color: #fff;
}
.fancybox-share__button:hover {
text-decoration: none;
}
.fancybox-share__button--fb {
background: #3b5998;
}
.fancybox-share__button--fb:hover {
background: #344e86;
}
.fancybox-share__button--pt {
background: #bd081d;
}
.fancybox-share__button--pt:hover {
background: #aa0719;
}
.fancybox-share__button--tw {
background: #1da1f2;
}
.fancybox-share__button--tw:hover {
background: #0d95e8;
}
.fancybox-share__button svg {
height: 25px;
margin-right: 7px;
position: relative;
top: -1px;
vertical-align: middle;
width: 25px;
}
.fancybox-share__button svg path {
fill: #fff;
}
.fancybox-share__input {
background: transparent;
border: 0;
border-bottom: 1px solid #d7d7d7;
border-radius: 0;
color: #5d5b5b;
font-size: 14px;
margin: 10px 0 0 0;
outline: none;
padding: 10px 15px;
width: 100%;
}
/* Thumbs */
.fancybox-thumbs {
background: #ddd;
bottom: 0;
display: none;
margin: 0;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
padding: 2px 2px 4px 2px;
position: absolute;
right: 0;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
top: 0;
width: 212px;
z-index: 99995;
}
.fancybox-thumbs-x {
overflow-x: auto;
overflow-y: hidden;
}
.fancybox-show-thumbs .fancybox-thumbs {
display: block;
}
.fancybox-show-thumbs .fancybox-inner {
right: 212px;
}
.fancybox-thumbs__list {
font-size: 0;
height: 100%;
list-style: none;
margin: 0;
overflow-x: hidden;
overflow-y: auto;
padding: 0;
position: absolute;
position: relative;
white-space: nowrap;
width: 100%;
}
.fancybox-thumbs-x .fancybox-thumbs__list {
overflow: hidden;
}
.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar {
width: 7px;
}
.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-track {
background: #fff;
border-radius: 10px;
box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
}
.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-thumb {
background: #2a2a2a;
border-radius: 10px;
}
.fancybox-thumbs__list a {
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
background-color: rgba(0, 0, 0, .1);
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
cursor: pointer;
float: left;
height: 75px;
margin: 2px;
max-height: calc(100% - 8px);
max-width: calc(50% - 4px);
outline: none;
overflow: hidden;
padding: 0;
position: relative;
-webkit-tap-highlight-color: transparent;
width: 100px;
}
.fancybox-thumbs__list a::before {
border: 6px solid #ff5268;
bottom: 0;
content: '';
left: 0;
opacity: 0;
position: absolute;
right: 0;
top: 0;
transition: all .2s cubic-bezier(.25, .46, .45, .94);
z-index: 99991;
}
.fancybox-thumbs__list a:focus::before {
opacity: .5;
}
.fancybox-thumbs__list a.fancybox-thumbs-active::before {
opacity: 1;
}
/* Styling for Small-Screen Devices */
@media all and (max-width: 576px) {
.fancybox-thumbs {
width: 110px;
}
.fancybox-show-thumbs .fancybox-inner {
right: 110px;
}
.fancybox-thumbs__list a {
max-width: calc(100% - 10px);
}
}
\ No newline at end of file
/**
* Owl Carousel v2.3.4
* Copyright 2013-2018 David Deutsch
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
*/
/*
* Owl Carousel - Core
*/
.owl-carousel {
display: none;
width: 100%;
-webkit-tap-highlight-color: transparent;
/* position relative and z-index fix webkit rendering fonts issue */
position: relative;
z-index: 1; }
.owl-carousel .owl-stage {
position: relative;
-ms-touch-action: pan-Y;
touch-action: manipulation;
-moz-backface-visibility: hidden;
/* fix firefox animation glitch */ }
.owl-carousel .owl-stage:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0; }
.owl-carousel .owl-stage-outer {
position: relative;
overflow: hidden;
/* fix for flashing background */
-webkit-transform: translate3d(0px, 0px, 0px); }
.owl-carousel .owl-wrapper,
.owl-carousel .owl-item {
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0); }
.owl-carousel .owl-item {
position: relative;
min-height: 1px;
float: left;
-webkit-backface-visibility: hidden;
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none; }
.owl-carousel .owl-item img {
display: block;
width: 100%; }
.owl-carousel .owl-nav.disabled,
.owl-carousel .owl-dots.disabled {
display: none; }
.owl-carousel .owl-nav .owl-prev,
.owl-carousel .owl-nav .owl-next,
.owl-carousel .owl-dot {
cursor: pointer;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.owl-carousel .owl-nav button.owl-prev,
.owl-carousel .owl-nav button.owl-next,
.owl-carousel button.owl-dot {
background: none;
color: inherit;
border: none;
padding: 0 !important;
font: inherit; }
.owl-carousel.owl-loaded {
display: block; }
.owl-carousel.owl-loading {
opacity: 0;
display: block; }
.owl-carousel.owl-hidden {
opacity: 0; }
.owl-carousel.owl-refresh .owl-item {
visibility: hidden; }
.owl-carousel.owl-drag .owl-item {
-ms-touch-action: pan-y;
touch-action: pan-y;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.owl-carousel.owl-grab {
cursor: move;
cursor: grab; }
.owl-carousel.owl-rtl {
direction: rtl; }
.owl-carousel.owl-rtl .owl-item {
float: right; }
/* No Js */
.no-js .owl-carousel {
display: block; }
/*
* Owl Carousel - Animate Plugin
*/
.owl-carousel .animated {
animation-duration: 1000ms;
animation-fill-mode: both; }
.owl-carousel .owl-animated-in {
z-index: 0; }
.owl-carousel .owl-animated-out {
z-index: 1; }
.owl-carousel .fadeOut {
animation-name: fadeOut; }
@keyframes fadeOut {
0% {
opacity: 1; }
100% {
opacity: 0; } }
/*
* Owl Carousel - Auto Height Plugin
*/
.owl-height {
transition: height 500ms ease-in-out; }
/*
* Owl Carousel - Lazy Load Plugin
*/
.owl-carousel .owl-item {
/**
This is introduced due to a bug in IE11 where lazy loading combined with autoheight plugin causes a wrong
calculation of the height of the owl-item that breaks page layouts
*/ }
.owl-carousel .owl-item .owl-lazy {
opacity: 0;
transition: opacity 400ms ease; }
.owl-carousel .owl-item .owl-lazy[src^=""], .owl-carousel .owl-item .owl-lazy:not([src]) {
max-height: 0; }
.owl-carousel .owl-item img.owl-lazy {
transform-style: preserve-3d; }
/*
* Owl Carousel - Video Plugin
*/
.owl-carousel .owl-video-wrapper {
position: relative;
height: 100%;
background: #000; }
.owl-carousel .owl-video-play-icon {
position: absolute;
height: 80px;
width: 80px;
left: 50%;
top: 50%;
margin-left: -40px;
margin-top: -40px;
background: url("owl.video.play.png") no-repeat;
cursor: pointer;
z-index: 1;
-webkit-backface-visibility: hidden;
transition: transform 100ms ease; }
.owl-carousel .owl-video-play-icon:hover {
-ms-transform: scale(1.3, 1.3);
transform: scale(1.3, 1.3); }
.owl-carousel .owl-video-playing .owl-video-tn,
.owl-carousel .owl-video-playing .owl-video-play-icon {
display: none; }
.owl-carousel .owl-video-tn {
opacity: 0;
height: 100%;
background-position: center center;
background-repeat: no-repeat;
background-size: contain;
transition: opacity 400ms ease; }
.owl-carousel .owl-video-frame {
position: relative;
z-index: 1;
height: 100%;
width: 100%; }
/*! WOW wow.js - v1.3.0 - 2016-10-04
* https://wowjs.uk
* Copyright (c) 2016 Thomas Grainger; Licensed MIT */!function(a,b){if("function"==typeof define&&define.amd)define(["module","exports"],b);else if("undefined"!=typeof exports)b(module,exports);else{var c={exports:{}};b(c,c.exports),a.WOW=c.exports}}(this,function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function d(a,b){return b.indexOf(a)>=0}function e(a,b){for(var c in b)if(null==a[c]){var d=b[c];a[c]=d}return a}function f(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)}function g(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],d=arguments.length<=3||void 0===arguments[3]?null:arguments[3],e=void 0;return null!=document.createEvent?(e=document.createEvent("CustomEvent"),e.initCustomEvent(a,b,c,d)):null!=document.createEventObject?(e=document.createEventObject(),e.eventType=a):e.eventName=a,e}function h(a,b){null!=a.dispatchEvent?a.dispatchEvent(b):b in(null!=a)?a[b]():"on"+b in(null!=a)&&a["on"+b]()}function i(a,b,c){null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c}function j(a,b,c){null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]}function k(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight}Object.defineProperty(b,"__esModule",{value:!0});var l,m,n=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),o=window.WeakMap||window.MozWeakMap||function(){function a(){c(this,a),this.keys=[],this.values=[]}return n(a,[{key:"get",value:function(a){for(var b=0;b<this.keys.length;b++){var c=this.keys[b];if(c===a)return this.values[b]}}},{key:"set",value:function(a,b){for(var c=0;c<this.keys.length;c++){var d=this.keys[c];if(d===a)return this.values[c]=b,this}return this.keys.push(a),this.values.push(b),this}}]),a}(),p=window.MutationObserver||window.WebkitMutationObserver||window.MozMutationObserver||(m=l=function(){function a(){c(this,a),"undefined"!=typeof console&&null!==console&&(console.warn("MutationObserver is not supported by your browser."),console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content."))}return n(a,[{key:"observe",value:function(){}}]),a}(),l.notSupported=!0,m),q=window.getComputedStyle||function(a){var b=/(\-([a-z]){1})/g;return{getPropertyValue:function(c){"float"===c&&(c="styleFloat"),b.test(c)&&c.replace(b,function(a,b){return b.toUpperCase()});var d=a.currentStyle;return(null!=d?d[c]:void 0)||null}}},r=function(){function a(){var b=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];c(this,a),this.defaults={boxClass:"wow",animateClass:"animated",offset:0,mobile:!0,live:!0,callback:null,scrollContainer:null,resetAnimation:!0},this.animate=function(){return"requestAnimationFrame"in window?function(a){return window.requestAnimationFrame(a)}:function(a){return a()}}(),this.vendors=["moz","webkit"],this.start=this.start.bind(this),this.resetAnimation=this.resetAnimation.bind(this),this.scrollHandler=this.scrollHandler.bind(this),this.scrollCallback=this.scrollCallback.bind(this),this.scrolled=!0,this.config=e(b,this.defaults),null!=b.scrollContainer&&(this.config.scrollContainer=document.querySelector(b.scrollContainer)),this.animationNameCache=new o,this.wowEvent=g(this.config.boxClass)}return n(a,[{key:"init",value:function(){this.element=window.document.documentElement,d(document.readyState,["interactive","complete"])?this.start():i(document,"DOMContentLoaded",this.start),this.finished=[]}},{key:"start",value:function(){var a=this;if(this.stopped=!1,this.boxes=[].slice.call(this.element.querySelectorAll("."+this.config.boxClass)),this.all=this.boxes.slice(0),this.boxes.length)if(this.disabled())this.resetStyle();else for(var b=0;b<this.boxes.length;b++){var c=this.boxes[b];this.applyStyle(c,!0)}if(this.disabled()||(i(this.config.scrollContainer||window,"scroll",this.scrollHandler),i(window,"resize",this.scrollHandler),this.interval=setInterval(this.scrollCallback,50)),this.config.live){var d=new p(function(b){for(var c=0;c<b.length;c++)for(var d=b[c],e=0;e<d.addedNodes.length;e++){var f=d.addedNodes[e];a.doSync(f)}});d.observe(document.body,{childList:!0,subtree:!0})}}},{key:"stop",value:function(){this.stopped=!0,j(this.config.scrollContainer||window,"scroll",this.scrollHandler),j(window,"resize",this.scrollHandler),null!=this.interval&&clearInterval(this.interval)}},{key:"sync",value:function(){p.notSupported&&this.doSync(this.element)}},{key:"doSync",value:function(a){if("undefined"!=typeof a&&null!==a||(a=this.element),1===a.nodeType){a=a.parentNode||a;for(var b=a.querySelectorAll("."+this.config.boxClass),c=0;c<b.length;c++){var e=b[c];d(e,this.all)||(this.boxes.push(e),this.all.push(e),this.stopped||this.disabled()?this.resetStyle():this.applyStyle(e,!0),this.scrolled=!0)}}}},{key:"show",value:function(a){return this.applyStyle(a),a.className=a.className+" "+this.config.animateClass,null!=this.config.callback&&this.config.callback(a),h(a,this.wowEvent),this.config.resetAnimation&&(i(a,"animationend",this.resetAnimation),i(a,"oanimationend",this.resetAnimation),i(a,"webkitAnimationEnd",this.resetAnimation),i(a,"MSAnimationEnd",this.resetAnimation)),a}},{key:"applyStyle",value:function(a,b){var c=this,d=a.getAttribute("data-wow-duration"),e=a.getAttribute("data-wow-delay"),f=a.getAttribute("data-wow-iteration");return this.animate(function(){return c.customStyle(a,b,d,e,f)})}},{key:"resetStyle",value:function(){for(var a=0;a<this.boxes.length;a++){var b=this.boxes[a];b.style.visibility="visible"}}},{key:"resetAnimation",value:function(a){if(a.type.toLowerCase().indexOf("animationend")>=0){var b=a.target||a.srcElement;b.className=b.className.replace(this.config.animateClass,"").trim()}}},{key:"customStyle",value:function(a,b,c,d,e){return b&&this.cacheAnimationName(a),a.style.visibility=b?"hidden":"visible",c&&this.vendorSet(a.style,{animationDuration:c}),d&&this.vendorSet(a.style,{animationDelay:d}),e&&this.vendorSet(a.style,{animationIterationCount:e}),this.vendorSet(a.style,{animationName:b?"none":this.cachedAnimationName(a)}),a}},{key:"vendorSet",value:function(a,b){for(var c in b)if(b.hasOwnProperty(c)){var d=b[c];a[""+c]=d;for(var e=0;e<this.vendors.length;e++){var f=this.vendors[e];a[""+f+c.charAt(0).toUpperCase()+c.substr(1)]=d}}}},{key:"vendorCSS",value:function(a,b){for(var c=q(a),d=c.getPropertyCSSValue(b),e=0;e<this.vendors.length;e++){var f=this.vendors[e];d=d||c.getPropertyCSSValue("-"+f+"-"+b)}return d}},{key:"animationName",value:function(a){var b=void 0;try{b=this.vendorCSS(a,"animation-name").cssText}catch(c){b=q(a).getPropertyValue("animation-name")}return"none"===b?"":b}},{key:"cacheAnimationName",value:function(a){return this.animationNameCache.set(a,this.animationName(a))}},{key:"cachedAnimationName",value:function(a){return this.animationNameCache.get(a)}},{key:"scrollHandler",value:function(){this.scrolled=!0}},{key:"scrollCallback",value:function(){if(this.scrolled){this.scrolled=!1;for(var a=[],b=0;b<this.boxes.length;b++){var c=this.boxes[b];if(c){if(this.isVisible(c)){this.show(c);continue}a.push(c)}}this.boxes=a,this.boxes.length||this.config.live||this.stop()}}},{key:"offsetTop",value:function(a){for(;void 0===a.offsetTop;)a=a.parentNode;for(var b=a.offsetTop;a.offsetParent;)a=a.offsetParent,b+=a.offsetTop;return b}},{key:"isVisible",value:function(a){var b=a.getAttribute("data-wow-offset")||this.config.offset,c=this.config.scrollContainer&&this.config.scrollContainer.scrollTop||window.pageYOffset,d=c+Math.min(this.element.clientHeight,k())-b,e=this.offsetTop(a),f=e+a.clientHeight;return d>=e&&f>=c}},{key:"disabled",value:function(){return!this.config.mobile&&f(navigator.userAgent)}}]),a}();b["default"]=r,a.exports=b["default"]});
\ No newline at end of file
<?php
namespace Module\CmsThemeCorp\Core;
use Illuminate\Events\Dispatcher;
use Illuminate\Support\ServiceProvider;
use ModStart\Admin\Config\AdminMenu;
use ModStart\Module\ModuleManager;
use Module\Banner\Provider\BannerPositionProvider;
use Module\Cms\Provider\Theme\CmsThemeProvider;
use Module\CmsThemeCorp\Provider\CmsThemeCorpBannerPositionProvider;
use Module\CmsThemeCorp\Provider\CorpSiteTemplateProvider;
use Module\CmsThemeCorp\Provider\CorpThemeProvider;
use Module\Vendor\Provider\SiteTemplate\SiteTemplateProvider;
class ModuleServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot(Dispatcher $events)
{
SiteTemplateProvider::register(CorpSiteTemplateProvider::class);
CmsThemeProvider::register(CorpThemeProvider::class);
AdminMenu::register([
[
'title' => '功能设置',
'icon' => 'tools',
'sort' => 300,
'children' => [
[
'title' => '模板设置',
'children' => [
[
'title' => 'CMS商务模板',
'url' => '\Module\CmsThemeCorp\Admin\Controller\ConfigController@index',
],
],
],
]
],
]);
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
}
}
## 模块介绍
「CMS商务模板」是一个提供一个CMS商务模板程序
## 包含模板
- 新闻
- 产品
- 招聘
- 案例
https://ms-assets.modstart.com/data/image/2021/11/09/39613_ouc7_7258.jpeg
https://ms-assets.modstart.com/data/image/2021/11/09/39614_i2xi_5986.jpeg
https://ms-assets.modstart.com/data/image/2021/12/21/52768_r8xy_5483.png
\ No newline at end of file
https://ms-assets.modstart.com/data/image/2021/12/21/52765_tp0n_1662.png
https://ms-assets.modstart.com/data/image/2021/12/21/52767_nr5v_7209.png
https://ms-assets.modstart.com/data/image/2021/12/21/52766_7eur_5509.png
https://ms-assets.modstart.com/data/image/2021/12/21/52767_erix_4362.png
\ No newline at end of file
CMS商务模板
---
- 提供一个CMS商务模板程序
演示内容初始化功能,适配最新模板
---
- 新增:演示内容初始化功能
- 优化:首页模板位置标示按模板区分调整
- 优化:适配最新模板
\ No newline at end of file
<?php
namespace Module\CmsThemeCorp\Provider;
use Module\Vendor\Provider\SiteTemplate\AbstractSiteTemplateProvider;
class CorpSiteTemplateProvider extends AbstractSiteTemplateProvider
{
const NAME = 'corp';
public function name()
{
return self::NAME;
}
public function title()
{
return 'CMS商务模板';
}
public function root()
{
return 'module::CmsThemeCorp.View';
}
}
<?php
namespace Module\CmsThemeCorp\Provider;
use Module\Cms\Provider\Theme\AbstractThemeProvider;
class CorpThemeProvider extends AbstractThemeProvider
{
public function name()
{
return 'CmsThemeCorp';
}
}
\ No newline at end of file
@extends('module::CmsThemeCorp.View.pc.cms.frame')
@section('pageTitleMain'){{$record['seoTitle']?$record['seoTitle']:$record['title']}}@endsection
@section('pageKeywords'){{$record['seoKeywords']?$record['seoKeywords']:$record['title']}}@endsection
@section('pageDescription'){{$record['seoDescription']?$record['seoDescription']:$record['title']}}@endsection
{!! \ModStart\ModStart::js('asset/common/lazyLoad.js') !!}
@section('bodyContent')
<div class="lg:tw-text-left tw-text-center tw-text-white tw-text-lg tw-py-20 tw-bg-gray-500 ub-cover"
@if($cat['bannerBg'])
style="background-image:url({{\ModStart\Core\Assets\AssetsUtil::fix($cat['bannerBg'])}});"
@endif
>
<div class="ub-container">
<h1 class="tw-text-4xl">{{$cat['title']}}</h1>
<div class="tw-mt-4">
{{$record['summary']}}
</div>
</div>
</div>
<div style="max-width:800px;margin:0 auto;">
<div class="ub-container">
<div class="ub-breadcrumb">
<a href="{{modstart_web_url('')}}">首页</a>
@foreach($catChain as $i=>$c)
<a href="{{modstart_web_url($c['url'])}}">{{$c['title']}}</a>
@endforeach
<a href="javascript:;" class="active">{{$record['title']}}</a>
</div>
</div>
<div class="ub-container tw-bg-white tw-rounded tw-py-10">
<div class="ub-article">
<h1 class="ub-text-center">{{$record['title']}}</h1>
<div class="tw-p-10">
<div>
<img style="max-width:100%;" src="{{\ModStart\Core\Assets\AssetsUtil::fix($record['cover'])}}" />
</div>
</div>
<div class="content ub-html" style="padding:1rem;font-size:0.8rem;">
{!! \ModStart\Core\Util\HtmlUtil::replaceImageSrcToLazyLoad($record['_data']['content'],'data-src',true) !!}
</div>
</div>
</div>
</div>
@endsection
@extends('module::CmsThemeCorp.View.pc.cms.frame')
@section('pageTitleMain'){{$record['seoTitle']?$record['seoTitle']:$record['title']}}@endsection
@section('pageKeywords'){{$record['seoKeywords']?$record['seoKeywords']:$record['title']}}@endsection
@section('pageDescription'){{$record['seoDescription']?$record['seoDescription']:$record['title']}}@endsection
{!! \ModStart\ModStart::js('asset/common/lazyLoad.js') !!}
@section('bodyContent')
<div class="tw-text-white tw-text-lg tw-py-20 tw-bg-transparent ub-cover" style="background-image:url({{\ModStart\Core\Assets\AssetsUtil::fixFullOrDefault($cat['bannerBg'],'vendor/Cms/bg/default.jpg')}});">
<div class="ub-container">
<h1 class="tw-text-4xl">{{$cat['title']}}</h1>
<div class="tw-mt-4">
{{$record['summary']}}
</div>
</div>
</div>
<div class="ub-container">
<div class="ub-breadcrumb">
<a href="{{modstart_web_url('')}}">首页</a>
@foreach($catChain as $i=>$c)
<a href="{{modstart_web_url($c['url'])}}">{{$c['title']}}</a>
@endforeach
<a href="javascript:;" class="active">{{$record['title']}}</a>
</div>
</div>
<div class="ub-container">
<div class="row">
<div class="col-md-9">
<div class="ub-panel" style="padding:1rem;">
<div class="ub-article">
<h1>{{$record['title']}}</h1>
<div class="attr">
<i class="iconfont icon-time"></i>
{{($record['postTime'])}}
</div>
<div class="content ub-html" style="font-size:0.8rem;">
{!! \ModStart\Core\Util\HtmlUtil::replaceImageSrcToLazyLoad($record['_data']['content'],'data-src',true) !!}
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="ub-panel">
<div class="head">
<div class="title">
最新发布
</div>
</div>
<div class="body ub-list-items">
@foreach(\MCms::latestCat($cat['id']) as $a)
<a class="item-c" href="{{$a['_url']}}">{{$a['title']}}</a>
@endforeach
</div>
</div>
</div>
</div>
</div>
@endsection
@extends('module::CmsThemeCorp.View.pc.cms.frame')
@section('pageTitleMain'){{$record['seoTitle']?$record['seoTitle']:$record['title']}}@endsection
@section('pageKeywords'){{$record['seoKeywords']?$record['seoKeywords']:$record['title']}}@endsection
@section('pageDescription'){{$record['seoDescription']?$record['seoDescription']:$record['title']}}@endsection
{!! \ModStart\ModStart::js('asset/common/lazyLoad.js') !!}
@section('bodyContent')
<div class="lg:tw-text-left tw-text-center tw-text-white tw-text-lg tw-py-20 tw-bg-gray-500 ub-cover"
@if($cat['bannerBg'])
style="background-image:url({{\ModStart\Core\Assets\AssetsUtil::fix($cat['bannerBg'])}});"
@endif
>
<div class="ub-container">
<h1 class="tw-text-4xl">{{$cat['title']}}</h1>
<div class="tw-mt-4">
{{$record['summary']}}
</div>
</div>
</div>
<div class="ub-container">
<div class="ub-breadcrumb">
<a href="{{modstart_web_url('')}}">首页</a>
@foreach($catChain as $i=>$c)
<a href="{{modstart_web_url($c['url'])}}">{{$c['title']}}</a>
@endforeach
<a href="javascript:;" class="active">{{$record['title']}}</a>
</div>
</div>
<div class="ub-container">
<div class="row">
<div class="col-md-9">
<div class="ub-panel" style="padding:1rem;">
<div class="ub-article">
<h1>{{$record['title']}}</h1>
<div class="attr">
<i class="iconfont icon-time"></i>
{{($record['postTime'])}}
</div>
<div class="tw-p-4 tw-rounded tw-bg-gray-100">
<div class="ub-pair">
<div class="name">岗位类型:</div>
<div class="value">
{{$record['_data']['type']}}
</div>
</div>
<div class="ub-pair">
<div class="name">招聘人数:</div>
<div class="value">
{{$record['_data']['amount']}}
</div>
</div>
</div>
<div class="content ub-html" style="font-size:0.8rem;">
{!! \ModStart\Core\Util\HtmlUtil::replaceImageSrcToLazyLoad($record['_data']['content'],'data-src',true) !!}
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="ub-panel">
<div class="head">
<div class="title">
最新发布
</div>
</div>
<div class="body ub-list-items">
@foreach(\MCms::latestCat($cat['id']) as $a)
<a class="item-c" href="{{$a['_url']}}">{{$a['title']}}</a>
@endforeach
</div>
</div>
</div>
</div>
</div>
@endsection
@extends('module::CmsThemeCorp.View.pc.cms.frame')
@section('bodyContent')
<main>
<div class="page-section pt-4">
<div class="container">
<nav aria-label="Breadcrumb">
<ol class="breadcrumb bg-transparent mb-4">
<li class="breadcrumb-item"><a href="{{modstart_web_url('')}}">首页</a></li>
@foreach($catChain as $i=>$c)
<li class="breadcrumb-item"><a href="{{modstart_web_url($c['url'])}}">{{$c['title']}}</a></li>
@endforeach
<li class="breadcrumb-item active" aria-current="page"><a href="javascript:;" class="active">{{$record['title']}}</a></li>
</ol>
</nav>
<div class="row">
<div class="col-lg-8">
<div class="blog-single-wrap">
<div class="post-thumbnail">
<img src="{{\ModStart\Core\Assets\AssetsUtil::fixOrDefault($record['cover'],'vendor/CmsThemeCorp/img/bg_image_1.jpg')}}" alt="">
</div>
<h1 class="post-title">{{$record['title']}}</h1>
<div class="post-meta">
<div class="post-author">
<span class="text-grey">By</span> {{$record['author']}}
</div>
<span class="gap">|</span>
<div class="post-date">
{{$record['postTime']}}
</div>
{{-- <span class="gap">|</span>--}}
{{-- <div>--}}
{{-- <a href="@asset('#')">StreetStyle</a>, <a href="@asset('#')">Fashion</a>, <a href="@asset('#')">Couple</a>--}}
{{-- </div>--}}
{{-- <span class="gap">|</span>--}}
{{-- <div class="post-comment-count">--}}
{{-- <a href="@asset('#')">8 Comments</a>--}}
{{-- </div>--}}
</div>
<div class="post-content">
<div class="content ub-html" style="font-size:0.8rem;">
{!! \ModStart\Core\Util\HtmlUtil::replaceImageSrcToLazyLoad($record['_data']['content'],'data-src',true) !!}
</div>
<div class="post-tags">
<p class="mb-2">标签:</p>
@foreach($record['_tags'] as $tag)
<a href="javascript:;" class="tag-link">{{$tag}}</a>
@endforeach
</div>
</div>
</div> <!-- .blog-single-wrap -->
</div>
<div class="col-lg-4">
<div class="widget">
{{-- --}}
{{-- <div class="widget-box">--}}
{{-- <h3 class="widget-title">Search</h3>--}}
{{-- <div class="divider"></div>--}}
{{-- <form action="#" class="search-form">--}}
{{-- <div class="form-group">--}}
{{-- <input type="text" class="form-control" placeholder="Type a keyword and hit enter">--}}
{{-- <button type="submit" class="btn"><span class="icon mai-search"></span></button>--}}
{{-- </div>--}}
{{-- </form>--}}
{{-- </div>--}}
{{-- <div class="widget-box">--}}
{{-- <h3 class="widget-title">Categories</h3>--}}
{{-- <div class="divider"></div>--}}
{{-- <ul class="categories">--}}
{{-- <li><a href="@asset('#')">Food <span>12</span></a></li>--}}
{{-- <li><a href="@asset('#')">Dish <span>22</span></a></li>--}}
{{-- <li><a href="@asset('#')">Desserts <span>37</span></a></li>--}}
{{-- <li><a href="@asset('#')">Drinks <span>42</span></a></li>--}}
{{-- <li><a href="@asset('#')">Ocassion <span>14</span></a></li>--}}
{{-- </ul>--}}
{{-- </div>--}}
<div class="ub-panel">
<div class="head">
<div class="title">
最新发布
</div>
</div>
<div class="body ub-list-items">
@foreach(\MCms::latestCat($cat['id']) as $a)
<a class="item-c" href="{{$a['_url']}}">{{$a['title']}}</a>
@endforeach
</div>
</div>
<div class="widget-box">
<h3 class="widget-title">最新发布</h3>
<div class="divider"></div>
@foreach(\MCms::latestCat($cat['id']) as $a)
<div class="blog-item">
<div class="content">
<h6 class="post-title"><a href="{{$a['_url']}}">{{$a['title']}}</a></h6>
<div class="meta">
<span class="mai-calendar"></span> {{$a['postTime']}}
</div>
</div>
</div>
@endforeach
</div>
{{-- <div class="widget-box">--}}
{{-- <h3 class="widget-title">Tag Cloud</h3>--}}
{{-- <div class="divider"></div>--}}
{{-- <div class="tagcloud">--}}
{{-- <a href="@asset('#')" class="tag-cloud-link">dish</a>--}}
{{-- <a href="@asset('#')" class="tag-cloud-link">menu</a>--}}
{{-- <a href="@asset('#')" class="tag-cloud-link">food</a>--}}
{{-- <a href="@asset('#')" class="tag-cloud-link">sweet</a>--}}
{{-- <a href="@asset('#')" class="tag-cloud-link">tasty</a>--}}
{{-- <a href="@asset('#')" class="tag-cloud-link">delicious</a>--}}
{{-- <a href="@asset('#')" class="tag-cloud-link">desserts</a>--}}
{{-- <a href="@asset('#')" class="tag-cloud-link">drinks</a>--}}
{{-- </div>--}}
{{-- </div>--}}
{{-- <div class="widget-box">--}}
{{-- <h3 class="widget-title">Paragraph</h3>--}}
{{-- <div class="divider"></div>--}}
{{-- <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ducimus itaque, autem necessitatibus voluptate quod mollitia delectus aut, sunt placeat nam vero culpa sapiente consectetur similique, inventore eos fugit cupiditate numquam!</p>--}}
{{-- </div>--}}
</div>
</div>
</div>
</div> <!-- .container -->
</div> <!-- .page-section -->
</main>
@endsection
@extends('module::CmsThemeCorp.View.pc.cms.frame')
@section('pageTitleMain'){{$record['seoTitle']?$record['seoTitle']:$record['title']}}@endsection
@section('pageKeywords'){{$record['seoKeywords']?$record['seoKeywords']:$record['title']}}@endsection
@section('pageDescription'){{$record['seoDescription']?$record['seoDescription']:$record['title']}}@endsection
{!! \ModStart\ModStart::js('asset/common/lazyLoad.js') !!}
@section('bodyContent')
<div class="lg:tw-text-left tw-text-center tw-text-white tw-text-lg tw-py-20 tw-bg-gray-500 ub-cover"
@if($cat['bannerBg'])
style="background-image:url({{\ModStart\Core\Assets\AssetsUtil::fix($cat['bannerBg'])}});"
@endif
>
<div class="ub-container">
<h1 class="tw-text-4xl">{{$cat['title']}}</h1>
<div class="tw-mt-4">
{{$record['summary']}}
</div>
</div>
</div>
<div class="ub-container">
<div class="ub-breadcrumb">
<a href="{{modstart_web_url('')}}">首页</a>
@foreach($catChain as $i=>$c)
<a href="{{modstart_web_url($c['url'])}}">{{$c['title']}}</a>
@endforeach
<a href="javascript:;" class="active">{{$record['title']}}</a>
</div>
</div>
<div class="ub-container">
<div class="ub-article-a">
<div class="row">
<div class="col-md-4">
<div class="image">
<div class="cover ub-cover-1-1"
style="background-image:url({{\ModStart\Core\Assets\AssetsUtil::fix($record['cover'])}});"></div>
</div>
</div>
<div class="col-md-8">
<div class="content">
<h1>{{$record['title']}}</h1>
<div class="info">
<div class="ub-pair">
<div class="name">价格:</div>
<div class="value">{{$record['_data']['price'] or '暂无'}}</div>
</div>
<div class="ub-pair">
<div class="name">分类:</div>
<div class="value">{{$record['_data']['type'] or '暂无'}}</div>
</div>
<div class="ub-pair">
<div class="name">说明:</div>
<div class="value">{{$record['summary']?$record['summary']:'[摘要]'}}</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row margin-top">
<div class="col-md-9">
<div class="tw-bg-white tw-rounded">
<div class="ub-html" style="font-size:0.8rem;padding:1rem;">
{!! \ModStart\Core\Util\HtmlUtil::replaceImageSrcToLazyLoad($record['_data']['content'],'data-src',true) !!}
</div>
</div>
</div>
<div class="col-md-3">
<div class="ub-menu simple">
<a class="title @if($catRoot['url']==\ModStart\Core\Input\Request::path()) active @endif"
href="{{modstart_web_url($catRoot['url'])}}">{{$catRoot['title']}}</a>
@foreach($catRootChildren as $c)
<a class="title @if(\ModStart\Core\Input\Request::path()==$c['url']) active @endif"
href="{{modstart_web_url($c['url'])}}">{{$c['title']}}</a>
@endforeach
</div>
</div>
</div>
</div>
@endsection
@extends('theme.default.pc.frame')
@section('pageTitle'){{modstart_config('siteName')}} - {{modstart_config('siteSlogan')}}@endsection
@section('headAppend')
@parent
<link rel="stylesheet" href="@asset('vendor/CmsThemeCorp/css/bootstrap.css')">
<link rel="stylesheet" href="@asset('vendor/CmsThemeCorp/css/maicons.css')">
<link rel="stylesheet" href="@asset('vendor/CmsThemeCorp/vendor/animate/animate.css')">
<link rel="stylesheet" href="@asset('vendor/CmsThemeCorp/vendor/owl-carousel/css/owl.carousel.css')">
<link rel="stylesheet" href="@asset('vendor/CmsThemeCorp/vendor/fancybox/css/jquery.fancybox.css')">
<link rel="stylesheet" href="@asset('vendor/CmsThemeCorp/css/theme.css')">
@endsection
@section('htmlProperties'){!! 'class="bs-styles"' !!}@endsection
@section('bodyAppend')
@parent
<script src="@asset('vendor/CmsThemeCorp/js/bootstrap.bundle.min.js')"></script>
<script src="@asset('vendor/CmsThemeCorp/vendor/owl-carousel/js/owl.carousel.min.js')"></script>
<script src="@asset('vendor/CmsThemeCorp/vendor/wow/wow.min.js')"></script>
<script src="@asset('vendor/CmsThemeCorp/vendor/fancybox/js/jquery.fancybox.min.js')"></script>
<script src="@asset('vendor/CmsThemeCorp/vendor/isotope/isotope.pkgd.min.js')"></script>
<script src="@asset('vendor/CmsThemeCorp/js/theme.js')"></script>
@endsection
@section('body')
<!-- Back to top button -->
<div class="back-to-top"></div>
<header>
<div class="top-bar">
<div class="container">
<div class="row align-items-center">
<div class="col-md-8">
<div class="d-inline-block">
<span class="mai-mail fg-primary"></span> <a
href="mailto:{{modstart_config('Cms_ContactEmail','[邮箱]')}}">{{modstart_config('Cms_ContactEmail','[邮箱]')}}</a>
</div>
<div class="d-inline-block ml-2">
<span class="mai-call fg-primary"></span> <a
href="tel:{{modstart_config('Cms_ContactPhone','[电话]')}}">{{modstart_config('Cms_ContactPhone','[电话]')}}</a>
</div>
</div>
<div class="col-md-4 text-right d-none d-md-block">
<div class="social-mini-button">
@if(\Module\Member\Auth\MemberUser::id())
{{-- <a class="ub-color-vip" href="/member_vip">--}}
{{-- <i class="iconfont icon-vip"></i>--}}
{{-- {{\Module\Member\Auth\MemberVip::get('title')}}--}}
{{-- </a>--}}
<a href="{{modstart_web_url('member_message')}}">
<i class="iconfont icon-bell"></i>
<?php $count = \Module\Member\Util\MemberMessageUtil::getUnreadMessageCount(\Module\Member\Auth\MemberUser::id()); ?>
@if($count)
<span class="badge" data-member-unread-message-count>{{$count}}</span>
@endif
</a>
<a href="{{modstart_web_url('member')}}"><i class="iconfont icon-user"></i> {{\Module\Member\Auth\MemberUser::get('username')}}</a>
<a href="javascript:;" data-confirm="确认退出?" data-href="/logout">退出</a>
@else
<a href="{{modstart_web_url('login')}}">登录</a>
<a href="{{modstart_web_url('register')}}">注册</a>
@endif
{{-- <a href="#"><span class="mai-logo-facebook-f"></span></a>--}}
{{-- <a href="#"><span class="mai-logo-twitter"></span></a>--}}
{{-- <a href="#"><span class="mai-logo-youtube"></span></a>--}}
{{-- <a href="#"><span class="mai-logo-linkedin"></span></a>--}}
</div>
</div>
</div>
</div> <!-- .container -->
</div> <!-- .top-bar -->
<nav class="navbar navbar-expand-lg navbar-light">
<div class="container">
<a href="{{modstart_web_url('')}}" class="navbar-brand">
<img class="tw-h-20"
src="{{\ModStart\Core\Assets\AssetsUtil::fix(modstart_config('siteLogo'),'/placeholder/200x50')}}"/>
</a>
<button class="navbar-toggler" data-toggle="collapse" data-target="#navbarContent"
aria-controls="navbarContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse" id="navbarContent">
<ul class="navbar-nav ml-auto pt-3 pt-lg-0">
@foreach(\Module\Nav\Util\NavUtil::listByPositionWithCache('head') as $nav)
<li class="nav-item {{modstart_baseurl_active($nav['link'])}}">
<a href="{{$nav['link']}}"
class="nav-link" {{\Module\Nav\Type\NavOpenType::getBlankAttributeFromValue(empty($nav['openType'])?null:$nav['openType'])}}>{{$nav['name']}}</a>
</li>
@endforeach
</ul>
</div>
</div> <!-- .container -->
</nav> <!-- .navbar -->
</header>
@section('bodyContent')
@show
<footer class="page-footer">
<div class="container">
<div class="row">
<div class="col-lg-4 py-3">
<h3>{{modstart_config('siteName','[网站名称]')}}</h3>
</div>
<div class="col-lg-4 py-3">
<h5>联系信息</h5>
<p>{{modstart_config('Cms_ContactAddress','[联系地址]')}}</p>
<p>邮箱: {{modstart_config('Cms_ContactEmail','[邮箱]')}}</p>
<p>电话: {{modstart_config('Cms_ContactPhone','[电话]')}}</p>
</div>
<div class="col-lg-4 py-3">
<h5>{{modstart_config('Cms_CompanyName','[企业名称]')}}</h5>
<ul class="footer-menu">
@foreach(\Module\Nav\Util\NavUtil::listByPositionWithCache('foot') as $nav)
<li>
<a href="{{$nav['link']}}" {{\Module\Nav\Type\NavOpenType::getBlankAttributeFromValue(empty($nav['openType'])?null:$nav['openType'])}}>{{$nav['name']}}</a>
</li>
@endforeach
</ul>
</div>
</div>
<hr>
<div class="row mt-4">
<div class="col-md-6">
<p>
&copy;{{modstart_config('siteDomain','[网站域名]')}}
<a href="http://beian.miit.gov.cn" class="tw-text-gray-400" target="_blank">{{modstart_config('siteBeian','[网站备案信息]')}}</a>
</p>
</div>
<div class="col-md-6 text-right">
<div class="sosmed-button">
<a href="#"><span class="mai-logo-facebook-f"></span></a>
<a href="#"><span class="mai-logo-twitter"></span></a>
<a href="#"><span class="mai-logo-youtube"></span></a>
<a href="#"><span class="mai-logo-linkedin"></span></a>
</div>
</div>
</div>
</div>
</footer>
@endsection
@extends('module::CmsThemeCorp.View.pc.cms.frame')
@section('bodyContent')
<div class="page-banner home-banner mb-5">
<div class="slider-wrapper">
<div class="owl-carousel hero-carousel">
@foreach(\MBanner::all('home') as $banner)
@if($banner['type']!==\Module\Banner\Type\BannerType::VIDEO)
<div class="hero-carousel-item">
<img src="{{\ModStart\Core\Assets\AssetsUtil::fix($banner['image'])}}"/>
@if($banner['type']==\Module\Banner\Type\BannerType::IMAGE_TITLE_SLOGAN_LINK)
<div class="img-caption">
<div class="subhead">{{$banner['title']}}</div>
<h1 class="mb-4">{{$banner['slogan']}}</h1>
<a href="{{$banner['link']}}"
class="btn btn-primary">{{$banner['linkText']}}</a>
</div>
@endif
</div>
@endif
@endforeach
</div>
</div> <!-- .slider-wrapper -->
</div> <!-- .page-banner -->
<main>
<div class="page-section">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 py-3">
<div class="subhead">关于我们</div>
<h2 class="title-section">{{modstart_config('Cms_HomeInfoTitle','[首页介绍标题]')}}</h2>
{!! modstart_config('Cms_HomeInfoContent','[首页公司介绍]') !!}
<a href="{{modstart_config('CmsThemeCorp_HomeInfoLink','/')}}" class="btn btn-primary mt-4">{{modstart_config('CmsThemeCorp_HomeInfoLinkText','查看更多')}}</a>
</div>
<div class="col-lg-6 py-3">
<div class="about-img">
<img src="{{\ModStart\Core\Assets\AssetsUtil::fixOrDefault(modstart_config('Cms_HomeInfoImage'),'vendor/CmsThemeCorp/img/about.jpg')}}" alt="">
</div>
</div>
</div>
</div>
</div> <!-- .page-section -->
<div class="page-section">
<div class="container">
<div class="row align-items-center">
<div class="col-md-6 py-3">
<div class="subhead">RECOMMENDS PRODUCT</div>
<h2 class="title-section">产品展示</h2>
</div>
<div class="col-md-6 py-3 text-md-right">
<a href="{{modstart_web_url('product')}}" class="btn btn-outline-primary">查看更多
<span class="mai-arrow-forward ml-2"></span>
</a>
</div>
</div>
<div class="ub-list-items">
<div class="row">
@foreach(\MCms::paginateCatByUrl('product',1,4,['where'=>['isRecommend'=>true]]) as $record)
<div class="col-md-3 col-6">
<div class="item-p">
<a class="image" href="{{$record['_url']}}" style="padding:0.25rem 0 0 0;">
<div class="cover contain ub-cover-1-1"
style="width:90%;margin:0 auto;background-image:url({{\ModStart\Core\Assets\AssetsUtil::fix($record['cover'])}});"></div>
</a>
<a class="title" href="{{$record['_url']}}">{{$record['title']}}</a>
</div>
</div>
@endforeach
</div>
</div>
</div>
</div>
<div class="page-section">
<div class="container">
<div class="row align-items-center">
<div class="col-md-6 py-3">
<div class="subhead">RECOMMENDS CASES</div>
<h2 class="title-section">推荐案例</h2>
</div>
<div class="col-md-6 py-3 text-md-right">
<a href="{{modstart_web_url('cases')}}" class="btn btn-outline-primary">查看更多
<span class="mai-arrow-forward ml-2"></span>
</a>
</div>
</div>
<div class="row mt-3">
@foreach(\MCms::paginateCatByUrl('cases',1,6,['where'=>['isRecommend'=>true]]) as $record)
<div class="col-lg-4 py-3">
<div class="portfolio">
<a href="{{\ModStart\Core\Assets\AssetsUtil::fix($record['cover'])}}"
data-fancybox="portfolio">
<img src="{{\ModStart\Core\Assets\AssetsUtil::fix($record['cover'])}}" alt="{{$record['title']}}">
</a>
</div>
</div>
@endforeach
</div>
</div> <!-- .container -->
</div> <!-- .page-section -->
<div class="page-section">
<div class="container">
<div class="row align-items-center">
<div class="col-md-6 py-3">
<div class="subhead">RECOMMENDS NEWS</div>
<h2 class="title-section">新闻中心</h2>
</div>
<div class="col-md-6 py-3 text-md-right">
<a href="{{modstart_web_url('cases')}}" class="btn btn-outline-primary">查看更多
<span class="mai-arrow-forward ml-2"></span>
</a>
</div>
</div>
<div class="ub-list-items">
<div class="row">
@foreach(\MCms::paginateCatByUrl('news',1,4,['where'=>['isRecommend'=>true]]) as $record)
<div class="col-md-6">
<div class="item-k tw-bg-white margin-bottom">
<a class="image" href="{{$record['_url']}}">
<div class="cover ub-cover-4-3"
style="background-image:url({{\ModStart\Core\Assets\AssetsUtil::fix($record['cover'])}})"></div>
</a>
<a class="title" href="{{$record['_url']}}">{{$record['title']}}</a>
<div class="summary">
{{\ModStart\Core\Util\HtmlUtil::text($record['summary'],200)}}
</div>
</div>
</div>
@endforeach
</div>
</div>
</div>
</div>
<div class="page-section">
<div class="container-fluid">
<div class="row row-cols-md-3 row-cols-lg-6 justify-content-center text-center">
@foreach(\MPartner::all('home') as $partner)
<div class="py-3 px-2">
<img class="tw-h-10" style="filter:grayscale(100%);" src="{{\ModStart\Core\Assets\AssetsUtil::fix($partner['logo'])}}" />
</div>
@endforeach
</div>
</div> <!-- .container-fluid -->
</div> <!-- .page-section -->
</main>
@endsection
{
"name": "CmsThemeCorp",
"title": "CMS商务模板",
"types": [
"Theme"
],
"require": [
"Vendor:>=1.8.0",
"Cms:>=2.0.0"
],
"version": "1.1.0",
"modstartVersion": ">=1.9.0",
"author": "ModStart",
"description": "科技类官方网站模板",
"providers": [
],
"config": {
}
}
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册