dcat-admin

dcat-admin


区块

<h1>区块(section)</h1> <h2>简介</h2> <p><code>Dcat Admin</code>提供<code>section</code>功能允许开发者在项目运行时更改页面各个部分的内容,而不需要直接去修改模板。</p> <p>&gt; {tip} <code>Dcat Admin</code>的<code>section</code>功能参考了<code>Blade</code>模板引擎的<code>@section</code>功能和<code>Wordpress</code>的<code>add_filter</code>功能,如果开发者理解这两者其中之一就能快速上手。</p> <h2>使用</h2> <h3>admin_section</h3> <p>输出<code>section</code>内容,此函数类似于<code>Blade</code>模板中的<code>@yield</code>指令以及<code>WordPress</code>中的<code>apply_filters</code>函数。</p> <p>参数:</p> <ul> <li><code>$section</code> {string} 区块名称</li> <li><code>$default</code> {string|Closure} 默认值</li> <li><code>$options</code> {array} 参数,需要注意的是<code>key</code>值必须使用英文字母开头,否则无法被获取到</li> </ul> <p>返回值:</p> <ul> <li>{string}</li> </ul> <pre><code class="language-php">echo admin_section('navigation', null, ['count' =&amp;gt; 4]);</code></pre> <h3>admin_inject_section</h3> <p>注入<code>section</code>内容,此函数类似<code>WordPress</code>中的<code>add_filter</code>函数。</p> <p>参数:</p> <ul> <li><code>$section</code> {string} 区块名称</li> <li><code>$content</code> {string|Illuminate\Contracts\Support\Renderable|Closure} 区块内容</li> <li><code>$append</code> {bool} 默认<code>true</code>,是否追加到上一个注入的内容后面,如果传<code>false</code>则会替换掉前面注入的内容</li> <li><code>$priority</code> {int} 默认<code>10</code>,优先级,值越大排序越靠前</li> </ul> <p>当第二个参数传入的是匿名函数时,匿名函数接收一个<code>Illuminate\Support\Fluent</code>对象。匿名函数中接收一个<code>Illuminate\Support\Fluent</code>对象,此对象包含有前面注入到此区块的内容,通过<code>previous</code>属性可以获得;如果此<code>section</code>还有其他参数,也可以通过访问属性的方式获得,如下:</p> <pre><code class="language-php">admin_inject_section('navigation', e(&amp;quot;&amp;lt;navigation&amp;gt;1&amp;lt;/navigation&amp;gt;&amp;quot;)); admin_inject_section('navigation', function ($options) { // 获取上一个注入此区块的内容 $previous = $options-&amp;gt;previous; // 获取自定义参数 $count = $options-&amp;gt;count; return e(&amp;quot;&amp;lt;navigation&amp;gt;count:{$count}&amp;lt;/navigation&amp;gt;&amp;quot;); }, true, 11); // 输出 echo admin_section('navigation', null, ['count' =&amp;gt; 4]); // 最终输出结果为 // &amp;lt;navigation&amp;gt;count:4&amp;lt;/navigation&amp;gt;&amp;lt;navigation&amp;gt;1&amp;lt;/navigation&amp;gt;</code></pre> <h3>admin_inject_default_section</h3> <p>注入默认内容,如果调用了<code>admin_inject_section</code>函数注入内容(无论是在前面还是后面都一样),则此函数不生效。</p> <p>参数:</p> <ul> <li><code>$section</code> {string} 区块名称</li> <li><code>$content</code> {string|Illuminate\Contracts\Support\Renderable|Closure} 区块内容,与<code>admin_inject_section</code>的第二个参数一致</li> </ul> <pre><code class="language-php">admin_inject_default_section('navigation', '暂无数据');</code></pre> <h3>admin_has_section</h3> <p>判断是否注入过内容到<code>section</code>,此函数返回一个<code>bool</code>类型值。</p> <pre><code class="language-php">var_dump(admin_has_section('navigation'));</code></pre> <h3>admin_has_default_section</h3> <p>判断是否注入过默认内容到<code>section</code>,此函数返回一个<code>bool</code>类型值。</p> <pre><code class="language-php">var_dump(admin_has_default_section('navigation'));</code></pre> <h2>系统预定义区块</h2> <p><code>Dcat Admin</code>预定义了一些区块,开发者可以通过这些区块改变页面内容。</p> <p>所有的预定义区块名称都定义在<code>Dcat\Admin\Admin::SECTION</code>这个类常量中,通过类常量的方式访问。</p> <h3>往&lt;head&gt;标签内输入内容</h3> <p>此通过<code>Admin::SECTION['HEAD']</code>区块可以往<code>&amp;lt;head&amp;gt;</code>标签内输入内容。</p> <p>在<code>app\Admin\bootstrap.php</code>中加入以下代码:</p> <pre><code class="language-php">use Dcat\Admin\Admin; admin_inject_section(Admin::SECTION['HEAD'], function () { return '&amp;lt;script src=&amp;quot;//oss.maxcdn.com/respond/1.4.2/respond.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;'; });</code></pre> <h3>往&lt;body&gt;标签内输入内容</h3> <p>通过<code>Admin::SECTION['BODY_INNER_BEFORE']</code>区块可以往<code>&amp;lt;body&amp;gt;</code>标签内部的开头位置输入内容。</p> <p>通过<code>Admin::SECTION['BODY_INNER_AFTER']</code>区块可以往<code>&amp;lt;body&amp;gt;</code>标签内部的结束位置输入内容。</p> <h3>往&lt;div id=&quot;app&quot;&gt;标签内输入内容</h3> <p>通过<code>Admin::SECTION['APP_INNER_BEFORE']</code>区块可以往<code>&amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;</code>标签内部的开头位置输入内容。</p> <p>通过<code>Admin::SECTION['APP_INNER_AFTER']</code>区块可以往<code>&amp;lt;div id=&amp;quot;app&amp;quot;&amp;gt;</code>标签内部的结束位置输入内容。</p> <h3>更改顶部导航栏用户信息面板内容</h3> <p>通过<code>Admin::SECTION['NAVBAR_USER_PANEL']</code>区块可以更改顶部导航栏的用户信息面板内容。</p> <pre><code class="language-php">admin_inject_section(Admin::SECTION['NAVBAR_USER_PANEL'], view('admin::partials.navbar-user-panel'));</code></pre> <h3>更改顶部导航栏前面内容</h3> <pre><code class="language-php">admin_inject_section(Admin::SECTION['NAVBAR_BEFORE'], view('...'));</code></pre> <h3>更改顶部导航栏后面内容</h3> <pre><code class="language-php">admin_inject_section(Admin::SECTION['NAVBAR_AFTER'], view('...'));</code></pre> <h3>更改顶部导航栏用户信息面板后面内容</h3> <p>通过<code>Admin::SECTION['NAVBAR_AFTER_USER_PANEL']</code>区块可以更改顶部导航栏的用户信息面板后面的内容。</p> <pre><code class="language-php">admin_inject_section(Admin::SECTION['NAVBAR_AFTER_USER_PANEL'], function () { return &amp;lt;&amp;lt;&amp;lt;HTML &amp;lt;li&amp;gt; &amp;lt;a href=&amp;quot;#&amp;quot; data-toggle=&amp;quot;control-sidebar&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-gears&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;/li&amp;gt; HTML; });</code></pre> <h3>更改菜单栏用户信息面板内容</h3> <p>通过<code>Admin::SECTION['LEFT_SIDEBAR_USER_PANEL']</code>区块可以更改菜单栏的用户信息面板的内容。</p> <pre><code class="language-php"> admin_inject_section(Admin::SECTION['LEFT_SIDEBAR_USER_PANEL'], view('admin::partials.sidebar-user-panel'));</code></pre> <h3>更改菜单栏</h3> <p>通过<code>Admin::SECTION['LEFT_SIDEBAR_MENU']</code>可以更改整个菜单栏内容。 &gt; {tip} <code>Dcat Admin</code>的菜单是通过注入默认内容到<code>LEFT_SIDEBAR_MENU</code>区块构建的,开发者可以替换掉系统默认的菜单渲染逻辑。</p> <pre><code class="language-php">use Dcat\Admin\Support\Helper; use Dcat\Admin\Admin; admin_inject_section(Admin::SECTION['LEFT_SIDEBAR_MENU'], function () { $menuModel = config('admin.database.menu_model'); $builder = Admin::menu(); $html = ''; foreach (Helper::buildNestedArray((new $menuModel())-&amp;gt;allNodes()) as $item) { $html .= view('admin::partials.menu', ['item' =&amp;gt; $item, 'builder' =&amp;gt; $builder])-&amp;gt;render(); } return $html; });</code></pre>

页面列表

ITEM_HTML