regulus / solid-site
一个Laravel 5的composer包,用于为页面分配章节名称和标题,简化创建导航栏、分页和其他组件的过程。
Requires
- php: >=5.4.0
- laravel/framework: >=5.0.0
Suggests
- regulus/elemental: 0.5.*
- regulus/formation: 1.3.*
- regulus/tetra-text: 0.6.*
This package is auto-updated.
Last update: 2024-09-26 05:43:12 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包含一些默认标识符,包括section
、subSection
、title
和titleHeading
。这些可以用于在菜单中突出显示菜单项,或用于任何需要唯一页面标识符的情况。
注意:尽管配置文件中的变量名是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个链接,假设它们存在)。