regulus / solid-site

一个Laravel 5的composer包,用于为页面分配章节名称和标题,简化创建导航栏、分页和其他组件的过程。

v0.8.1 2021-04-21 05:40 UTC

README

一个Laravel 5的composer包,用于为页面分配章节名称和标题,简化创建导航栏、分页和其他组件的过程。

安装

要安装SolidSite,请确保已在Laravel 5的composer.json文件中添加了"regulus/solid-site"。

"require": {
	"regulus/solid-site": "0.8.*"
},

然后从命令行运行php composer.phar update。Composer将安装SolidSite包。现在,您只需注册服务提供者并在config/app.php中设置SolidSite的别名即可。将以下内容添加到providers数组中

Regulus\SolidSite\SolidSiteServiceProvider::class,

并将以下内容添加到aliases数组中

'Site' => Regulus\SolidSite\Facade::class,

您可以使用'SolidSite'或其他别名,但为了简单起见,建议使用'Site'。现在SolidSite已准备就绪。

现在,从命令行发布配置文件site.php以及视图和JS文件。

php artisan vendor:publish

如果您想将公开目录更改为其他名称,例如public_html或甚至../public_html(如果您的Laravel 5应用程序位于另一个目录中),您可以使用SolidSite对Laravel 5的Illuminate\Foundation\Application类的内置扩展。SolidSite的Application类允许您在config/site.php中设置public_path以恢复此功能。如果您想使用它,请在bootstrap/app.php中替换以下代码

$app = new Illuminate\Foundation\Application(
	realpath(__DIR__.'/../')
);

为以下代码

$app = new Regulus\SolidSite\Application(
	realpath(__DIR__.'/../')
);

然而,这完全是可选的。如果您选择不使用它,您仍然可以通过Site::publicPath()获取SolidSite配置的公开路径。

设置章节、子章节和标题

设置标识符

Site::set('section', 'Forum');

Site::set(['subSection', 'title.main'], 'Forum: General'); // sets both to "Forum: General"

Site::set([
	'section'    => 'Forum',
	'subSection' => 'General',
	'title.main' => 'Forum: General',
]);

您可以使用SolidSite包来存储您不想在其他地方存储的配置项。SolidSite包含一些默认标识符,包括sectionsubSectiontitletitleHeading。这些可以用于在菜单中突出显示菜单项,或用于任何需要唯一页面标识符的情况。

注意:尽管配置文件中的变量名是snakecase,但您也可以使用camelcase来获取和设置它们。

获取标识符

Site::get('section');

设置页面标题

Site::setTitle('Title');

Site::set('title.main', 'Title');

获取页面标题

Site::title();

这将返回title.main配置项以及name配置项(您的网站名称)或如果没有设置标题,则仅返回name配置项。

设置页面标题

Site::setHeading('Heading');

Site::set('title.heading', 'Heading');

获取页面标题

Site::heading();

这将返回title.heading配置项或如果没有设置标题,则返回title配置项。这可以在您希望页面的标题与网页的title标签不同的情况下使用。如果您需要子标题,也可以使用setSubHeading()subHeading()

设置页面标题前缀

Site::setTitlePrefix('Forum'); // set a prefix only for the document title itself

Site::setTitlePrefix('Forum', true); // set a prefix for the document title as well as the page heading

根据章节和子章节突出显示菜单项

SolidSite有几个方法用于在设置正确的章节和/或子章节时突出显示菜单项(添加"selected"类)。

根据章节突出显示菜单项

<ul>
	<li{!! Site::selectBy('section', 'Home') !!}><a href="#">Home</a></li>
	<li{!! echo Site::selectBy('section', 'FAQ') !!}><a href="#">FAQ</a></li>
	<li{!! echo Site::selectBy('section', 'Contact') !!}><a href="#">Contact</a></li>
</ul>

根据多个标识符突出显示菜单项

<ul>
	<li{!! Site::selectBy('section', 'Home') !!}><a href="#">Home</a></li>
	<li{!! Site::selectBy('section', 'Stuff') !!}>
		<a href="#">Stuff</a>
		<ul>
			<li{!! Site::selectByMulti(['section' => 'Stuff', 'subSection' => 'Some Stuff']) !!}>
				<a href="#">Some Stuff</a>
			</li>
			<li class="some-class{!! Site::selectByMulti(['section' => 'Stuff', 'subSection' => 'Some Other Stuff'], true) !!}">
				<a href="#">Some Other Stuff</a>
			</li>
		</ul>
	</li>
	<li{!! Site::selectBy('section', 'FAQ', false, 'active') !!}><a href="#">FAQ</a></li>
	<li class="some-class{!! Site::selectBy('section', 'Contact', true) !!}"><a href="#">Contact</a></li>
</ul>

如果成功,将会将一个类添加到菜单列表项中。默认类为 "selected",但可以在配置文件中调整,或在 selectBy()selectByMulti() 方法中作为第四个参数调整。第三个类是一个布尔值,表示返回的标记是否应该是整个类声明,或者只是返回类的名称(前面加一个空格),如果您想在现有的类声明中添加该类。

资产URL

创建使用 config.php 中指定的目录的资产 URL

echo Site::asset('libraries/bootstrap/js/bootstrap.min.js');

创建图像资产 URL

echo Site::img('logo.png');

echo Site::img('logo'); // if no extension is provided, ".png" is assumed

创建 CSS 资产 URL

echo Site::css('styles.css');

echo Site::css('styles'); // if no extension is provided, ".css" is assumed

创建 JavaScript 资产 URL

echo Site::js('jquery.js');

echo Site::js('jquery'); // if no extension is provided, ".js" is assumed

创建上传文件 URL

echo Site::uploadedFile('users/1.png');

资产 URL 方法可以帮助缩短标记,并使您的视图更干净。您可以根据您的偏好,在 config.php 中为每种资产类型自定义目录。

导航栏

添加面包屑导航项

Site::addTrailItem('Home');
Site::addTrailItem('Stuff', 'stuff');

第一个参数是将在面包屑导航中显示的标题。第二个参数是它链接到的 URI 路由。默认情况下,它将链接到您网站的首页。在 filters.php 中的 before() 过滤器中设置初始项效果很好。

添加多个面包屑导航项

Site::addTrailItems([
	'Home'     => null, // will be base URL
	'Forum'    => 'forum', // will be like http://website.com/forum
	'Sections' => ['sections', 'forum'], // will be like http://forum.website.com/sections
]);

在视图中输出面包屑导航标记

{!! Site::getBreadcrumbTrailMarkup() !!}

注意:如果您想自己构建面包屑导航标记,可以使用 getTrailItems()。但是,面包屑导航视图将被发布到 resources/views/vendor/solid-site,因此您也可以修改现有的一个。

按钮列表

在列表中添加按钮

Site::addButton('Home', 'home'); // simple version (label, URI / URL)

Site::addButton([ // versatile version for more customization
	'uri'    => 'home',
	'label'  => 'Home',
	'class'  => 'btn btn-primary',
]);

添加多个按钮

Site::addButtons([
	[
		'uri'    => 'home',
		'label'  => 'Home',
		'class'  => 'btn btn-primary',
	],
	[
		'url'    => [null, 'forum'], // will be like http://forum.website.com
		'label'  => 'Forum',
		'target' => '_blank',
	],
]);

您还可以同时设置多个按钮列表。每个列表都有一个“命名空间”。您可以使用 setButtonList()(默认为 main)更改活动列表,或者您可以在按钮项数组中添加一个 list 变量。您还可以将列表作为 addButtons() 方法的第二个参数指定。

添加多个按钮

在视图中输出按钮列表标记

{!! Site::getButtonListMarkup() !!}

{!! Site::getButtonListMarkup('secondary') !!}

第一个示例将使用活动按钮列表。第二个示例指定要显示的列表。

分页

SolidSite 使创建由 URI 段支持的分页变得容易,而不是依赖于像 ?page=2 这样的 GET 查询字符串(同时保持 GET 查询选项供需要的人使用)。这可以使您创建具有非常干净的 URL 的分页系统。

设置分页

$query = Items::where('type_id', 1); // set up a query using a model or the query builder

$page = 2; // can be an integer, or simply "last" to get the last page

Site::paginate($query, $page, [
	'uri'      => 'items', // you can pass a URI or URL for the pagination buttons
	'function' => 'Actions.getItems', // you can also pass a function to be called when a button is clicked (used in conjunction with the included JS)
]);

要使用 $page 参数覆盖 GET 查询分页,应将 site.pagination.page_links.href.get 配置变量设置为 false。否则,可以将 $page 留为 null 值,以便使用 page GET 值。配置文件中还有其他设置,例如设置书签("1 2 ..." 链接,如果在当前页 + 页面链接半径外)的链接宽度。书签和半径链接也自动应用类,这允许您根据访问设备的可用屏幕宽度调整书签和半径长度。这有助于产生响应式布局。此外,如果发布视图,分页标记本身也是完全可调整的。

注意:可以使用 SolidSite JavaScript 类与 paginate() 结合使用来设置在按钮点击时进行 AJAX 分页数据请求。

JavaScript

SolidSite 包含一个用于定义应用 URL(默认包括基本 URL 和 API URL)的简单 JavaScript 类,将 Laravel 的 CSRF 令牌应用于所有 AJAX 请求,通过字符串执行函数,并初始化基于 AJAX 的分页。您可以轻松修改和添加提供的基本功能。

加载和初始化 JS

@include('solid-site::load_js')

注意:如果您正在使用基于AJAX的分页,那么在每个请求中返回分页菜单的渲染标记是一个好主意,这样您就可以更新页面链接半径(此半径默认为当前页面上下3个链接,假设它们存在)。