仅当存在外部文件时显示按钮



我的show.blade文件中有这个按钮:

<a href="https://www.externaldomain.com/downloads/{{ $book->slug }}.pdf" class="badge badge-primary" style="width:100%;padding:10px;font-size:12px;margin-top:2px;"><i class="fa fa-download"></i> Download</a>

只有当href文件存在于externaldmain中时,我才显示此下载按钮。否则不应加载/显示此按钮。请建议我粘贴一个简单的代码,而不是上面的代码。

注意:我在mydomain.com和存储在outsidedomain.com中的文件上使用此代码。

@php
$file = "https://www.externaldomain.com/downloads/".$book->slug.".pdf";//EXTERNAL LINK
$file_headers = @get_headers($file);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
$file_exists = false;
}
else {
$file_exists = true;
}
@endphp
@if($file_exists)
<a href="EXTERNAL_LINK">Download</a> //Download button
@endif

我可以给出一些基本的想法。

将类名添加到那些有链接的外部链接下载文件中,如下所示。这里我命名为externalFile

<a  class="externalFile" href="http://127.0.0.1:8005/storage/dummy.pdf" class="badge badge-primary" style="width:100%;padding:10px;font-size:12px;margin-top:2px;"><i class="fa fa-download"></i> Download</a>

然后使用ajax脚本。找到所有下载链接并将其发送到服务器。

$(function (){
var links = [];
$(".externalFile").each(function ()
{
links.push(this.href);
});

$.ajax
({
type: "post",
url: "{{url('ajax')}}",
data:{
links:links,
"_token":"{{csrf_token()}}"
},
success: function(data)
{
if(data.failure){
$.each(data.failure,function (key,links){
$("a[href='"+links+"']").hide()
})
}
}
});
})

然后在服务器端

Route::any("ajax", function (Request  $request) {

$linkList=[];
foreach ($request->links as $value){
$client=Http::get($value);
if($client->status()==200){
$linkList['sucess'][]=$value;
} else{
$linkList['failure'][]=$value;
}
}
return $linkList;
});

Note:我不认为这是一种优雅的方式。

相关内容

  • 没有找到相关文章