Laraveladmin自定义拓展及常见问题(上)
如果你听说过laravel并且使用过laravel,那么对于laravel-admin这款为它量身定做的后台框架一定不会陌生。强大的功能,高效,便捷的操作绝对是建站量产的佳选。但是也由于它整合了特别多的插件工具,似乎并不能被新手很好地拓展使用。在实际使用中,我们肯定会用到增删改查之外的功能,比如说自定义删除关联性不太强的其它数据;比如说在视图中添加工具按钮,实现跳转功能;比如隐藏某些本身未设置自定义的按钮;再比如更加灵活的实现联动。除了这些还有很多很多,如果要去拓展这些功能。我们就要了解它的逻辑走向,一层一层寻找控制方法,很伤脑筋。本人近一个月都在用这个框架做项目,一开始确实被它的便捷性折服。但随着领导和客户需求的升级,发现要实现某种功能效果变得越来越吃力。经过重重险阻才取得真经。今天我就把在项目中遇到的一些问题和自定义的功能分享给大家。
安装laravel的步骤就不细说了,自行百度吧。本人在这里只提供两个地址,A、
http://z-song.github.io/laravel-admin/#/zh/installation,开发文档,里面已经详细记录了安装步骤和使用方法。B、https://github.com/z-song/laravel-admin laravel-admin的github库地址。有了这两个地址,安装和基本使用就不成问题了。接下来咱们就要面对第一个问题,如何访问。
假设用wamp搭建环境,站点目录是laravel2,那么我们想当然的会这样去访问http://localhost/laravel2/public/admin/,结果也会如期所至,
但是当我们用输入用户名,密码之后,就不会尽如心意了
解决方案其实很简单,只要配置一个重写向就可以了。(具体细节自行百度),现在重新访问登录就OK了。
进入后台框架,咱们就要解决问题了。第一点问题说一说上传图片的问题。像文档里所说的配置路径在这里就不讲了。我主要讲真正遇到的bug,比如上传图片时这一个报错
一, NotSupportedException in AbstractEncoder.php line 151: Encodingformat (tmp) is not supported.
造成这个bug的原因是上传的过程中,系统识别到的图片拓展名为tmp,所以找不到合适的方法来存储图片就报错了。但是据说这种现象只在windows系统中出现,linux中就不存在。这个解答也是我在国外论坛中臆测的,虽然也提供了相应的方案,只是我认为保证本地测试正常就可以了没必要上纲上线,就找到一个很投机的方法,就是把tmp也归入到jpg或者bmp的图片处理方法中就可避免报错。具体做法是更改vendorinterventionimagesrcInterventionImageAbstractEncoder.php这个文件,找到
case "jpg":
case "jpeg":
case "image/jpg":
case "image/jpeg":
case "image/pjpeg":
紧接着添加一行case "tmp":就可以了。只是这样处理的后果是本地环境上传的图片都是一种拓展名格式了。介意的话再行研究。
解决完了这个bug,咱们就要开辟新大陆了。
看到这个table有没有觉得很别扭,本来最左边正常显示序号的地方却显示了数据表的id字段,不仅体验感差也很不安全。但是搞不懂这个框架为什么不提供默认序号显示。没办法我们只好自己动手了。
二, 给表单视图加上排列序号。
因为加序号的逻辑很简单,所以我们主要是从视图着手。但是考虑到要在控制里灵活自定义序号是否显示,就需要在核心层里作一些改动。首先进入vendorencorelaravel-adminsrcGrid.php,在类里面定义一个公共属性,并赋值字符串none,public $shownum = "none";然后再加入两个方法,一个作为控制器赋值,一个作为视图判断。
public function shownum()
{
return $this->shownum;
}
public function shownum_able()
{
$this->shownum= "block";
}
接下来就是主角登场,在后台视图层vendorencorelaravel-adminviewsgrid able.blade.php(默认路径)里加入显示序号。
@foreach($grid->columns() as$key=>$column)
<?php
if($key==1)
{
echo "序号";
}
?>
{{$column->getLabel()}}{!! $column->sorter()!!}
@endforeach
<?php
$per = $grid->perPage;
$now =@$_GET["page"]?$_GET["page"]:1;
$i= $per*$now-$per;
?>
@foreach($grid->rows() as $key=>$row)
<?php
$i++;
?>
getHtmlAttributes() !!}>
@foreach($grid->columnNamesas $key=>$name)
<?php
if($key==1)
{
echo "".$i."";
}
?>
{!!$row->column($name) !!}
@endforeach
@endforeach
完成这两步后,只要在相应控制器里的grid方法里加入$grid->shownum_able();就可完美显示序号列了。
完成了序号显示,再进入跳转按钮的操作。例如禁显编辑,删除,新增,导出等操作文档都有讲解。但是如要要实现出现下图的效果就要自已动手了。
三, 右上角添加跳转指定页面按钮
为了实现自定义设置,仍然要在vendorencorelaravel-adminsrcGrid.php页面添加一个属性protected $preg_url =["url"=>"","title"=>"","flag"=>false];然后再添加一个控制器可以传参的方法和一个视图层获取内容的方法
/**
*设置跳转地址及标题*
*@param $url跳转地址
*@param $title标题
*/
public function define_preg($url,$title)
{
$this->preg_url["url"] = $url;
$this->preg_url["title"] = $title;
$this->preg_url["flag"] = true;
}
/**
*显示跳转按钮的html *
*/
public function show_define_preg()
{
$title = $this->preg_url["title"];
$url =$this->preg_url["url"];
if($this->preg_url["flag"]){
return "
{$title}
";
}
}
再一步就是在视图层调用了,在{!! $grid->renderHeaderTools() !!}之后加入
{!!$grid->show_define_preg() !!}就ok了,
最后一步就是在相应的控制器里加入一行传参代码
$grid->define_preg(url("admin/menu"), "返回菜单");
再下一个拓展就会更加实际了,在视图层的table里经常有缩略图出现,如果想要看清这些缩略图要么需要打开编辑状态,要么进入这个图片的地址。体验效果都会很差。这个时候我们就需要一个类似放大器的工具,点击图片显示大图并且可直接关闭放大视图。
四, 单击列表图片实现放大效果
为了实现单个页面自定义效果,同样要在vendorencorelaravel-adminsrcGrid.php页面添加一个公共属性,不过这一次我们可给他默认为真,表示默认有放大图片效果,public $show_imgzoom= 1;另外再给他一个可以禁用放大效果的方法
public function imgzoom_disable()
{
$this->show_imgzoom = 0;
}
最后一步就是在视图层添加效果了,本人热衷原生所以用Jquery写的放大效果,并支持上翻下翻。找到viewsadminform.blade.php,并在最开头添加如下代码
<?php
if($grid->show_imgzoom>0){
?>
到底了到头了
最终效果如图
如果不想在某页面使用放大效果可以在grid方法里添加$grid->imgzoom_disable()来禁用。如果想调整显示背景色或效果也可在上述视图层代码中修改。
说到图片显示了,再说一说多图片上传的问题。如果用最新的laravel5.4版本下载最新的admin程序,可以使用image()->multiple()实现多图上传,但是会造成不能单个删除,且重新上传全覆盖的现象。而使用文档中所说的mltipleImage()方法却不显示图片。究竟怎么解决呢。
五, 多图片上传,单图异步删除
看似复杂,实则简单。造成这种现象的原因按本人观点是由于新版本未开发完全,有些功能还没有完全具备,可以通过升级来修复,但是恐怕短期还是会有些小bug。所以更建议使用上一代或上上一代已经非常稳定的版本来安装。比如laravel5.3。选择多图后如下图
,这个时候问题又来了,点击提交之后没有任何报错,却不跳转。于是通过火狐浏览器的firbug工具查找原因,发现以下线索
,也就是说实际上表单提交了,但是由于什么原因又返回了编辑页面。关于问题原因和解决方法就等到明天再写了。
电商新风口,如何用社交赢天下?随着互联网的普及和整个经济形态的转变,这十年来新媒体和电商一直处于爆发性增长的态势,传统的营销模式受到了剧烈冲击,无数传统企业就发现沿袭老一套的营销模式走不通,所以就把心思放到了电
让手持拍摄变得更加简单,智云品牌发布会连发三款新品作为国内外知名的手持稳定器设备生产厂商,智云在10月31日正式举办品牌升级发布会,现场除了智云创始人索尼(中国)代表以及各分享嘉宾出席活动之外,还同步上市了云鹤M3SMOOTH5S
浅谈M2固态硬盘堆料颗粒主控协议对SSD的影响颗粒主控协议这些配置决定了一块固态硬盘的性能与定位。和手机一样,高端旗舰定位的固态硬盘,在参数配置方面大多数都是采用了目前主流厂商的零部件,比如镁光TLC群联的主控等等。那么颗粒主
iPhone11ProMax上手一周,简单说一下体验感受开售前,从拼夕夕上买的iPhone11ProMax,256GB,赶上百亿补贴,货没收到,先返了900到支出账户,实际到手9999元,平生第一次买这么贵的手机。简单来说一下简单的使用
AMDcpu一不小心掉地上了,这种方法修复弯针脚很简单我们在日常维护电脑的时候,由于好奇好多人都会把CPU拆下来,看一下,偶尔一不小心CPU掉在地上就变成这样的了这些针脚变弯,肯定不能在放到主板上了,下面介绍下怎么把所有针脚摆正。一把
真相只有一个!腾百万之间的关系是这样的核心阅读笔者在审视这次事件时发现,看衰飞凡的内容里面,都称呼飞凡为飞凡网。这个称谓挺有意思,接触飞凡两年多,从没听说飞凡对外称呼又叫飞凡网。正文跟了万达旗下飞凡电商的新闻两年有余,
爱了!三个功能让我决定,家里就选华为智慧屏S系列了现在很多科技新品一出来,网友就在吐槽要做减法,不是继续做加法。其实这一想法在智能电视领域也挺普遍的,在智慧屏没出来前,几乎大多数品牌都在执着一块屏的素养,亦或是芯片的迭代,功能技术
依恋与12种亲子关系力一个月之前吧,不知怎的,许久未联系的同学突然联系我,说想要我帮忙寻找下离婚律师,很不幸,我并没有这方面的资源,所以没帮到她。同学离婚的要求不高,只要孩子。她说她实在忍受不了她的孩子
入选国家产教融合型企业,科大讯飞单日涨幅6。83,每股重回606月17日,科大讯飞维持了端午节后开盘以来的上涨态势,盘中股价一度高达63。18元,报收62。58元,较昨日收盘大涨6。83。股价飘红的背后,是科大讯飞入选国家产教融合型企业名单所
国家中心城市呼之欲出,有你们省会吗?国家中心城市是各大省会城市都欲争取的荣誉,成为国家中心城市,不仅是荣誉,更多的是在国家资源分配政策倾斜政策支持财政方面均会获得国家大力支持,换句话说,就是举全国之力发展中心城市,对
智能安全生活不凡体验华为智选生态连发四款新品HUAWEIHiLink平台拥有卓越的网络和智能技术,通过与TOP级企业进行合作,孕育而生的华为智选生态产品给智能生活带来不凡体验。如今,继照明环境系列之后,华为智选生态再迎新品,