{"id":1221,"date":"2023-03-18T09:08:27","date_gmt":"2023-03-18T01:08:27","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=1221"},"modified":"2023-04-29T09:37:33","modified_gmt":"2023-04-29T01:37:33","slug":"expandrow-design-for-expanding-grid-rows-in-laravel-admin-model-table","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/18\/expandrow-design-for-expanding-grid-rows-in-laravel-admin-model-table\/","title":{"rendered":"laravel-admin\u6a21\u578b\u8868\u683cGrid\u884c\u5c55\u5f00ExpandRow\u8bbe\u8ba1"},"content":{"rendered":"<h2>\u81ea\u5b9a\u4e49ExpandRow<\/h2>\n<p>app\/Exceptions\/Column\/ExpandRow.php<\/p>\n<p><!-- more --><\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace App\\Exceptions\\Column;\n\nuse Encore\\Admin\\Admin;\nuse Encore\\Admin\\Grid\\Displayers\\AbstractDisplayer;\n\nclass ExpandRow extends AbstractDisplayer\n{\n\n    public function display(\\Closure $callback = null, $btn = &#039;&#039;, $col_key = &#039;&#039;)\n    {\n        $callback = $callback-&gt;bindTo($this-&gt;row);\n\n        $html = call_user_func($callback);\n\n        $script = &lt;&lt;&lt;EOT\n\n$(&#039;.grid-expand-$col_key&#039;).on(&#039;click&#039;, function () {\n    if ($(this).data(&#039;inserted&#039;) == &#039;0&#039;) {\n        var key = $(this).data(&#039;key&#039;);\n        var row = $(this).closest(&#039;tr&#039;);\n        var html = $(&#039;template.grid-expand-&#039;+key).html();\n\n        row.after(&quot;&lt;tr&gt;&lt;td colspan=&#039;&quot;+row.find(&#039;td&#039;).length+&quot;&#039; style=&#039;padding:0 !important; border:0px;&#039;&gt;&quot;+html+&quot;&lt;\/td&gt;&lt;\/tr&gt;&quot;);\n\n        $(this).data(&#039;inserted&#039;, 1);\n    }\n\n    $(&quot;i&quot;, this).toggleClass(&quot;fa-caret-right fa-caret-down&quot;);\n});\nEOT;\n        Admin::script($script);\n\n        $btn = $btn ?: $this-&gt;column-&gt;getName();\n\n        $key = $col_key . $this-&gt;getKey();\n\n        return &lt;&lt;&lt;EOT\n&lt;a class=&quot;btn btn-xs btn-default grid-expand-$col_key&quot; data-inserted=&quot;0&quot; data-key=&quot;{$key}&quot; data-toggle=&quot;collapse&quot; data-target=&quot;#grid-collapse-{$key}&quot;&gt;\n    &lt;i class=&quot;fa fa-caret-right&quot;&gt;&lt;\/i&gt; $btn\n&lt;\/a&gt;\n&lt;template class=&quot;grid-expand-{$key}&quot;&gt;\n    &lt;div id=&quot;grid-collapse-{$key}&quot; class=&quot;collapse&quot;&gt;$html&lt;\/div&gt;\n&lt;\/template&gt;\nEOT;\n    }\n\n}<\/code><\/pre>\n<h2>bootstrap\u6ce8\u518c<\/h2>\n<p>Admin\/bootstrap.php<\/p>\n<pre><code class=\"language-php\">use App\\Exceptions\\Column\\ExpandRow;\nuse Encore\\Admin\\Grid\\Column;\n\nColumn::extend(&#039;expand&#039;, ExpandRow::class);<\/code><\/pre>\n<h2>Grid\u4e2d\u4f7f\u7528<\/h2>\n<pre><code class=\"language-php\">$grid-&gt;column(&#039;version_id&#039;, &quot;\u7248\u672c\u4fe1\u606f&quot;)-&gt;expand(function () {\n    \/\/$app_version = AppVersion::where(&#039;id&#039;, $this-&gt;version_id)-&gt;get([&#039;version_code&#039;, &#039;version_name&#039;, &#039;update_desc&#039;, &#039;bundle_desc&#039;])-&gt;first();\n    $app_version = $this-&gt;version;\n    $version_array = array(&#039;\u7248\u672c\u53f7&#039;=&gt;$app_version-&gt;version_code, &#039;\u7248\u672c\u540d\u79f0&#039;=&gt;$app_version-&gt;version_name, &#039;\u66f4\u65b0\u5185\u5bb9&#039;=&gt;$app_version-&gt;update_desc, &#039;\u66f4\u65b0\u65f6\u95f4&#039;=&gt;$app_version-&gt;update_time);\n    $rows = array_only($version_array, [&#039;\u7248\u672c\u53f7&#039;, &#039;\u7248\u672c\u540d\u79f0&#039;, &#039;\u66f4\u65b0\u5185\u5bb9&#039;, &#039;\u66f4\u65b0\u65f6\u95f4&#039;]);\n    return new Table([], $rows);\n}, &#039;\u7248\u672c\u4fe1\u606f&#039;, &#039;version_id&#039;);\n\n$grid-&gt;column(&#039;file&#039;, &quot;\u6587\u4ef6\u4fe1\u606f&quot;)-&gt;expand(function () {\n    $file_array = array(&#039;\u6587\u4ef6\u8def\u5f84&#039;=&gt;$this-&gt;file_path, &#039;Size&#039;=&gt;$this-&gt;size, &#039;Md5&#039;=&gt;$this-&gt;md5, &#039;Sha1&#039;=&gt;$this-&gt;sha1);\n    $rows = array_only($file_array, [&#039;\u6587\u4ef6\u8def\u5f84&#039;, &#039;Size&#039;, &#039;Md5&#039;, &#039;Sha1&#039;]);\n    return new Table([], $rows);\n}, &#039;\u6587\u4ef6\u4fe1\u606f&#039;, &#039;file&#039;);<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u81ea\u5b9a\u4e49ExpandRow app\/Exceptions\/Column\/ExpandRow.php &lt;?p [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[75],"class_list":["post-1221","post","type-post","status-publish","format-standard","hentry","category-laravel","tag-laravel-admin"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=1221"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1221\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}