Javascript 如何允许用户编辑和删除自制博客中的帖子和评论?
我建立了一个带有公告/博客的网站,目前还没有任何删除/编辑功能,我尝试了几种方法,但它们要么不能正常工作,要么根本不能工作 我曾经尝试过用下拉式WYSIWYG编辑器编辑帖子/评论,如果你点击编辑按钮,它会用Jquery展开评论,然后用户可以编辑他们的评论。问题是,这只适用于顶部注释,因为每个编辑div/表单都有相同的ID 删除有一个问题,即评论与带有外键约束的帖子相连接,因此,如果我尝试删除帖子,它不会允许我删除,因为外键 //删除函数Javascript 如何允许用户编辑和删除自制博客中的帖子和评论?,javascript,jquery,laravel,Javascript,Jquery,Laravel,我建立了一个带有公告/博客的网站,目前还没有任何删除/编辑功能,我尝试了几种方法,但它们要么不能正常工作,要么根本不能工作 我曾经尝试过用下拉式WYSIWYG编辑器编辑帖子/评论,如果你点击编辑按钮,它会用Jquery展开评论,然后用户可以编辑他们的评论。问题是,这只适用于顶部注释,因为每个编辑div/表单都有相同的ID 删除有一个问题,即评论与带有外键约束的帖子相连接,因此,如果我尝试删除帖子,它不会允许我删除,因为外键 //删除函数 public function deleteannounc
public function deleteannouncement(Announcement $announcement, $id){
$announcements = Announcement::findOrFail($id);
$replies = Reply::where('post_id', $announcement->id);
$announcements->delete($replies, $announcements);
return redirect('/mededelingen/')->with('success','Bericht succesvol verwijderd!');
}
public function deletereply($id){
$replies = Reply::findOrFail($id);
$replies->delete($replies);
return redirect(url()->previous())->with('success','Opmerking succesvol verwijderd!');
}
//编辑功能评论/回复
public function postSummernoteeditorReply(Request $request, $id){
$this->validate($request, [
'detail' => 'required',
]);
$detail=$request->detail;
$dom = new \DomDocument();
$dom->loadHtml( mb_convert_encoding($detail, 'HTML-ENTITIES', "UTF-8"), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$images = $dom->getElementsByTagName('img');
foreach($images as $img){
$src = $img->getAttribute('src');
// if the img source is 'data-url'
if(preg_match('/data:image/', $src)){
// get the mimetype
preg_match('/data:image\/(?<mime>.*?)\;/', $src, $groups);
$mimetype = $groups['mime'];
// Generating a random filename
$filename = uniqid();
$filepath = "/img/blog/$filename.$mimetype";
// @see http://image.intervention.io/api/
$image = Image::make($src)
// resize if required
/* ->resize(300, 200) */
->encode($mimetype, 100) // encode file to the specified mimetype
->save(public_path($filepath));
$new_src = asset($filepath);
$img->removeAttribute('src');
$img->setAttribute('src', $new_src);
} // <!--endif
} // <!--endforeach
$detail = $dom->saveHTML();
$summernote = Summernote::find($id);
$summernote->post_content = $detail;
//dd($summernote->post_content);
//dd($summernote->post_id);
$summernote->update();
return redirect(url()->previous());
}
我希望实现的是,管理员和OP能够在没有外键约束的情况下删除他们的帖子。如果帖子被删除,评论也需要随之删除
编辑功能在my@foreach中工作,因此用户可以编辑每条评论
提前感谢您,很抱歉问了这么长的问题:)这不是与Laravel或您的应用程序设计相关的问题,您需要通知您的SGBD(Mysql),当您删除某个表上的记录时,与已删除记录相关的所有记录也需要删除。此功能可以通过在迁移中使用方法
onDelete('cascade')
来实现
Schema::table('repress',函数(Blueprint$table){
$table->autoIncrement('id');
....
$table->foreign('announcement_id')->references('id')->on('announces')->onDelete('cascade');
});
这样,您就不需要在代码中包含此部分:
$Reply=Reply::where('post_id',$announcement->id);
$announcements->delete($repress,$announcements);
我建议您也检查一下laravel中雄辩的关系,它使管理表之间的关系更加容易
例如,如果要选择单个注释的所有回复,只需编写
$annoucement->回复();
谢谢,这帮助我删除了包含所有评论/回复的公告,现在我只能编辑第一个回复。你有什么建议给我吗?
<div class="card-body">
@foreach($replies as $reply)
<div class="announcement">
@if(Auth::user()->admin == 1 || Auth::user()->id == $reply->user_id)
<a href="/reactie/destroy/{{$reply->id}}" class="float-right"><i class="fal fa-dumpster"></i></a>
@endif
@if(Auth::user()->id == $reply->user_id)
<i class="fal fa-pencil float-right" id="yeet" class="float-right" style="color: #007ac3; margin-right: 10px;"></i>
@endif
<p style="font-size: 0.8rem;">{{date("j F Y", strtotime($reply->created_at))}} | Geplaatst door <span>{{$reply->username}}</span></p>
<p style="margin-top: -10px;">{!! $reply->post_content !!}</p>
@if(Auth::user()->id == $reply->user_id)
<div class="reply-expand" style="display: none;">
<form method="POST" action="{{ route('Reply Edit', ['id' => $reply->id]) }}">
@csrf
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Reactie Aanpassen:</strong>
<textarea class="form-control summernote" name="detail">{!! $reply->post_content !!}</textarea>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<button type="submit" class="btn btn-primary pull-right" style="border-radius: 0px; box-shadow: 0px 1px 10px -4px #000000;">Aanpassen</button>
</div>
</form>
</div>
@endif
<hr>
</div>
@endforeach
{{ $replies->links() }}
<form method="POST" action="{{ route('editor.post', ['id' => $announcements->id]) }}">
@csrf
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Reactie:</strong>
<textarea class="form-control summernote" name="detail"></textarea>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<button type="submit" class="btn btn-primary pull-right" style="border-radius: 0px; box-shadow: 0px 1px 10px -4px #000000;">Reageer</button>
</div>
</form>
</div>
$(document).ready(function() {
$('.summernote').summernote({
height: 400,
});
$('#yeet').click(function() {
$('.reply-expand').toggle("slide");
});
});