123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071 |
- <?php
- namespace App\Admin\Controllers\Content;
- use App\Admin\Extensions\Field\Template;
- use App\Admin\Extensions\Form\ValueForm;
- use App\Http\Controllers\Controller;
- use App\Models\Ad;
- use App\Models\AdCategory;
- use App\Models\Subsite;
- use App\Models\SubsiteAd;
- use Encore\Admin\Controllers\HasResourceActions;
- use Encore\Admin\Facades\Admin;
- use Encore\Admin\Form;
- use Encore\Admin\Grid;
- use Encore\Admin\Grid\Filter;
- use Encore\Admin\Layout\Content;
- use Encore\Admin\Show;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Cache;
- //use Encore\Admin\Grid;
- class AdController extends Controller
- {
- use HasResourceActions;
- /**
- * Index interface.
- *
- * @param Content $content
- * @return Content
- */
- public function index(Content $content)
- {
- return $content
- ->header('广告列表')
- ->description(' ')
- ->body(view('admin.content.ad_list')->with(['grid' => $this->grid()]));
- }
- /**
- * Show interface.
- *
- * @param mixed $id
- * @param Content $content
- * @return Content
- */
- public function show($id, Content $content)
- {
- return $content
- ->header('广告列表')
- ->description(' ')
- ->body($this->detail($id));
- }
- /**
- * Edit interface.
- *
- * @param mixed $id
- * @param Content $content
- * @return Content
- */
- public function edit($id, Content $content)
- {
- $info = Ad::find($id);
- $form = new ValueForm();
- $ad_info = Ad::findOrFail($id);
- //$form->action('/admin/content/ads/update');
- $form->action(route('admin.ad.update'));
- $form->attribute('enctype', 'multipart/form-data');
- $form->disablePjax();
- $form->text('title', '广告标题')->default($ad_info->title)->help('(区分不同广告条目,并不在广告中显示)')->setWidth(4)->setMustMark();
- $display_option = [
- 'on' => ['value' => 1, 'text' => '是', 'color' => 'success'],
- 'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'],
- ];
- $form->switch('is_display', '显示状态')->states($display_option)->default($ad_info->is_display)->setMustMark();
- if ($info->subsite_id == 0) {
- $subsites = Subsite::where(['effective' => 1])->orderBy('order', 'asc')->get()->pluck('sitename', 'id');
- } else {
- $subsites = Subsite::where([['effective', '=', 1], ['id', '<>', $info->subsite_id]])->orderBy('order', 'asc')->get()->pluck('sitename', 'id')->toArray();
- $subsites['0'] = '总站';
- $subsites = collect($subsites);
- }
- if ($subsites->isNotEmpty() && $info->subsite_id == 0) {
- $relations = SubsiteAd::where(['ad_id' => $id])->get()->pluck('subsite_id')->toArray();
- $form->multipleSelect('relate_subsites', '同步分站')->options($subsites)->default($relations);
- } else {
- $form->hidden('relate_subsites');
- }
- $form->ignore(['relate_subsites']);
- $cate_option = AdCategory::all()->pluck('category_name', 'id');
- $form->select('category_id', '广告位')->options($cate_option)->default($ad_info->category_id)->setWidth(4)->attribute(['id' => 'sub_category'])->setMustMark();
- $form->number('list_order', '显示顺序')->default($ad_info->list_order)->min(0)->help('(数字越大越靠前)')->setMustMark();
- $form->date('started_at', '开始日期')
- ->format('YYYY-MM-DD')
- ->default($ad_info->started_at)
- ->rules('required|date', ['required' => '开始日期不能为空。', 'date' => '开始日期格式不正确。'])
- ->help('(设置广告起始日期,格式yyyy-mm-dd,留空为不限制起始日期)');
- $form->date('ended_at', '结束日期')
- ->format('YYYY-MM-DD')
- ->default($ad_info->ended_at)
- ->rules('required|date', ['required' => '结束日期不能为空。', 'date' => '结束日期格式不正确。'])
- ->help('(设置广告结束日期,格式yyyy-mm-dd,留空为不限制结束日期)');
- $form->textarea('note', '备注')->default($ad_info->note);
- $form->html("<div id='change_field'></div>")->plain();
- $form->hidden('alias')->value($ad_info->alias)->attribute('id', 'alias');
- $form->hidden('theme')->value($ad_info->theme);
- $form->hidden('type_id')->value($ad_info->type_id)->attribute('id', 'type_id');
- $form->hidden('id')->value($ad_info->id);
- $template = new Template();
- $template->setTemplatesId("text_div");
- if ($ad_info->type_id == '1') {
- $template->text('content', '文字内容')->default($ad_info->content)->help('(文字广告的显示内容)')->setMustMark();
- $template->url('url', '文字链接')->default($ad_info->url)->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');
- $template->color('text_color', '文字颜色')->default($ad_info->text_color)->setMustMark();
- } else {
- $template->text('content', '文字内容')->help('(文字广告的显示内容)')->setMustMark();
- $template->url('url', '文字链接')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');
- $template->color('text_color', '文字颜色')->setMustMark();
- }
- $template->setTemplatesId("image_div");
- if ($ad_info->type_id == '2') {
- $img_file = null;
- $img_url = null;
- if (preg_match('/^http/', $ad_info->content)) {
- $img_url = $ad_info->content;
- } else {
- $img_file = $ad_info->content;
- }
- $template->image('img_file', '本地上传')->uniqueName()->help('(允许格式为gif/jpg/bmp/png,文件大小1000KB)')->value($img_file)->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);
- $template->text('img_url', '或图片地址')->default($img_url)->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/img/baidu_logo.gif)');
- $template->url('url', '图片链接')->default($ad_info->url)->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');
- $template->text('target', 'target')->default($ad_info->target)->help('(请输入_self等,默认_blank)');
- $template->text('explain', '图片说明文字')->default($ad_info->explain);
- $template->number('uid', '会员UID')->default($ad_info->uid)->min(0)->help('(设置会员UID后,当鼠标移动到图片上将会显示相关的职位和企业信息)');
- } else {
- $template->image('img_file', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为gif/jpg/bmp/png,文件大小1000KB)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);
- $template->text('img_url', '或图片地址')->help('(请输入包含http://或https://的完整链接,如http://www.baidu.com/img/baidu_logo.gif)');
- $template->url('url', '图片链接')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');
- $template->text('explain', '图片说明文字');
- $template->number('uid', '会员UID')->min(0)->help('(设置会员UID后,当鼠标移动到图片上将会显示相关的职位和企业信息)');
- }
- $template->setTemplatesId("code_div");
- if ($ad_info->type_id == '3') {
- $template->textarea('content', '代码')->default($ad_info->content)->rows(1)->help('(请直接输入需要展现的广告代码)')->setMustMark();
- } else {
- $template->textarea('content', '代码')->rows(1)->help('(请直接输入需要展现的广告代码)')->setMustMark();
- }
- $template->setTemplatesId("flash_div");
- if ($ad_info->type_id == '4') {
- $flash_file = null;
- $flash_url = null;
- if (preg_match('/^images\//', $ad_info->content)) {
- $flash_file = $ad_info->content;
- } else {
- $flash_url = $ad_info->content;
- }
- $template->image('content', '本地上传')->default($flash_file)->uniqueName()->setWidth(3)->help('(允许格式为:swf,文件大小:1000KB)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);
- $template->url('url', '或者Flash地址')->default($flash_url)->help('(请输入包含http://或https://的完整链接,如: http://www.baidu.com/123.swf)');
- } else {
- $template->file('content', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为:swf,文件大小:1000KB)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);
- $template->url('url', '或者Flash地址')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');
- }
- $template->setTemplatesId("vedio_div");
- if ($ad_info->type_id == '5') {
- $vedio_file = null;
- $vedio_url = null;
- if (preg_match('/^images\//', $ad_info->content)) {
- $vedio_file = $ad_info->content;
- } else {
- $vedio_url = $ad_info->content;
- }
- $template->file('content', '本地上传')->default($vedio_file)->uniqueName()->setWidth(3)->help('(允许格式为swf/flv/f4v,文件大小5000KB,大文件FTP上传)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);
- $template->url('url', '或者视频地址')->default($vedio_url)->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');
- } else {
- $template->file('content', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为swf/flv/f4v,文件大小5000KB,大文件FTP上传)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);
- $template->url('url', '或者视频地址')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');
- }
- $form->disableReset();
- $data['custom_form'] = $form->render();
- $data['temp'] = $template->render();
- $data['ad_info'] = $ad_info;
- return $content
- ->header('广告')
- ->description(' ')
- ->body(view('admin.content.ad_edit')->with($data));
- }
- public function update(Request $request)
- {
- $ad = Ad::findOrFail($request->input('id'));
- $rules = [
- 'title' => 'required|max:50',
- 'is_display' => 'required',
- 'category_id' => 'required',
- 'list_order' => 'required|max:10',
- 'note' => 'max:80',
- ];
- $message = [
- 'title.required' => '广告标题不能为空。',
- 'title.max' => '广告标题长度不能超过50。',
- 'is_display.required' => '请选择显示状态。',
- 'category_id.required' => '请选择广告位。',
- 'list_order.required' => '显示顺序不能为空。',
- 'list_order.max' => '显示顺序长度不能大于10。',
- 'note.max' => '备注长度不能超过80。',
- ];
- if ($request->input('started_at')) {
- $rules['started_at'] = 'date';
- $message['started_at.date'] = '开始日期格式不正确。';
- }
- if ($request->input('ended_at')) {
- $rules['ended_at'] = 'date|after_or_equal:started_at';
- $message['ended_at.date'] = '结束日期格式不正确。';
- $message['ended_at.after_or_equal'] = '结束日期不能早于开始日期。';
- }
- $type_id = $request->input('type_id');
- if ($type_id == '1') {
- $rules['content'] = 'required';
- $rules['text_color'] = 'required';
- $message['content.required'] = '文字内容不能为空。';
- $message['text_color.required'] = '文字颜色不能为空。';
- } else if ($type_id == '2') {
- $rules['img_file'] = 'mimes:gif,jpeg,bmp,png|max:1024';
- $rules['explain'] = 'max:80';
- $rules['uid'] = 'nullable|numeric';
- $message['img_file.mimes'] = '本地上传格式不正确。';
- $message['img_file.max'] = '本地上传文件大小不能超过1M。';
- $message['explain.max'] = '图片说明文字长度不能大于80。';
- /*$message['uid.required'] = 'UID不能为空。';*/
- $message['uid.numeric'] = 'UID只能填写数字。';
- } else if ($type_id == '3') {
- $rules['content'] = 'required';
- $message['content.required'] = '代码不能为空。';
- } else if ($type_id == '4') {
- $rules['content'] = 'mimes:swf';
- $message['content.mimes'] = '本地上传格式不正确。';
- } else if ($type_id == '5') {
- $rules['content'] = 'mimes:swf,flv,f4v';
- $message['content.mimes'] = '本地上传格式不正确。';
- }
- $request->validate($rules, $message);
- $time = date('Y-m-d H:i:s', time());
- $is_display = $request->input('is_display') == 'on' ? 1 : 0;
- $started_at = $request->input('started_at') ? strtotime($request->input('started_at')) : 0;
- $ended_at = $request->input('ended_at') ? strtotime($request->input('ended_at')) : 0;
- $type_id = $request->input('type_id');
- $theme = $request->input('theme') ? $request->input('theme') : 'default';
- $note = $request->input('note') ? $request->input('note') : '';
- $ad->theme = $theme;
- $ad->alias = $request->input('alias');
- $ad->is_display = $request->input('is_display') == 'on' ? 1 : 0;
- $ad->category_id = $request->input('category_id');
- $ad->type_id = $type_id;
- $ad->title = $request->input('title');
- $ad->note = $request->input('note') ? $request->input('note') : '';
- $ad->list_order = $request->input('list_order');
- $ad->started_at = $request->input('started_at') ? strtotime($request->input('started_at')) : 0;
- $ad->ended_at = $request->input('ended_at') ? strtotime($request->input('ended_at')) : 0;
- $ad->updated_at = $time;
- if ($type_id == '1') { //文字广告
- $ad->content = $request->input('content');
- $ad->url = $request->input('url') ? $request->input('url') : '';
- $ad->text_color = $request->input('text_color') ? $request->input('text_color') : '#000000';
- $ad->uid = 0;
- } else if ($type_id == '2') { //图片广告
- $img_file = $request->input('img_file');
- $img_url = $request->input('img_url');
- $url = $request->input('url') ? $request->input('url') : '';
- $target = $request->input('target') ? $request->input('target') : '_blank';
- $explain = $request->input('explain');
- $uid = $request->input('uid');
- $up_file = null;
- if ($request->hasFile('img_file')) {
- $file = 'img_file';
- $up_file = $request->$file->store(config('admin.upload.directory.image'), config('admin.upload.disk'));
- }
- $content = $up_file ? $up_file : $img_url;
- if ($content) {
- $ad->content = $content;
- }
- $ad->url = $url;
- $ad->target = $target;
- $ad->text_color = '#000000';
- $ad->uid = $uid ? $uid : 0;
- $ad->explain = $explain;
- } else if ($type_id == '3') { //代码广告
- $content = $request->input('content') ? $request->input('content') : 0;
- if ($content) {
- $ad->content = $content;
- }
- $ad->uid = 0;
- $ad->text_color = '#000000';
- $ad->url = '';
- } else if ($type_id == '4' || $type_id == '5') { //flash广告 、视频广告
- $url = $request->input('url') ? $request->input('url') : '';
- $up_file = null;
- if ($request->hasFile('content')) {
- $file = 'content';
- $up_file = $request->$file->store(config('admin.upload.directory.file'), config('admin.upload.disk'));
- }
- $content = $up_file ? $up_file : $url;
- if ($content) {
- $ad->content = $content;
- }
- $ad->url = '';
- $ad->uid = 0;
- $ad->text_color = '#000000';
- }
- $set_data = [];
- $subsites = $request->input('relate_subsites');
- if (empty($subsites)) {
- $subsites = [];
- }
- $subsites = array_merge([$ad->subsite_id], $subsites);
- foreach ($subsites as $k => $v) {
- if ($v !== null) {
- $set_data[] = [
- 'ad_id' => $ad->id,
- 'subsite_id' => $v,
- ];
- }
- }
- if ($ad->save()) {
- if ($set_data) {
- SubsiteAd::where('ad_id', $ad->id)->delete();
- SubsiteAd::insert($set_data);
- }
- admin_toastr(trans('admin.save_succeeded'), 'success');
- return redirect(admin_base_path() . '/content/ad/index');
- } else {
- throw new \Exception(trans('admin.save_failed'));
- }
- }
- public function updates(Request $request)
- {
- $rules = [
- 'title' => 'required|max:50',
- 'is_display' => 'required',
- 'category_id' => 'required',
- 'list_order' => 'required|max:10',
- 'note' => 'max:80',
- ];
- $message = [
- 'title.required' => '广告标题不能为空。',
- 'title.max' => '广告标题长度不能超过50。',
- 'is_display.required' => '请选择显示状态。',
- 'category_id.required' => '请选择广告位。',
- 'list_order.required' => '显示顺序不能为空。',
- 'list_order.max' => '显示顺序长度不能大于10。',
- 'note.max' => '备注长度不能超过80。',
- ];
- if ($request->input('started_at')) {
- $rules['started_at'] = 'date';
- $message['started_at.date'] = '开始日期格式不正确。';
- }
- if ($request->input('ended_at')) {
- $rules['ended_at'] = 'date|after_or_equal:started_at';
- $message['ended_at.date'] = '结束日期格式不正确。';
- $message['ended_at.after_or_equal'] = '结束日期不能早于开始日期。';
- }
- $type_id = $request->input('type_id');
- if ($type_id == '1') {
- $rules['content'] = 'required';
- $rules['text_color'] = 'required';
- $message['content.required'] = '文字内容不能为空。';
- $message['text_color.required'] = '文字颜色不能为空。';
- } else if ($type_id == '2') {
- $rules['img_file'] = 'required_without:img_url|mimes:gif,jpeg,bmp,png';
- $rules['img_url'] = 'required_without:img_file';
- $rules['explain'] = 'max:80';
- $rules['uid'] = 'required|numeric';
- $message['img_file.required_without'] = '本地上传或者图片地址填写一项。';
- $message['img_file.mimes'] = '本地上传格式不正确。';
- $message['img_url.required_without'] = '本地上传或者图片地址填写一项。';
- $message['explain.max'] = '图片说明文字长度不能大于80。';
- $message['uid.required'] = 'UID不能为空。';
- $message['uid.numeric'] = 'UID只能填写数字。';
- } else if ($type_id == '3') {
- $rules['content'] = 'required';
- $message['content.required'] = '代码不能为空。';
- } else if ($type_id == '4') {
- $rules['content'] = 'required_without:url|mimes:swf';
- $rules['url'] = 'required_without:content';
- $message['content.required_without'] = '本地上传或者Flash地址填写一项。';
- $message['content.mimes'] = '本地上传格式不正确。';
- $message['url.required_without'] = '本地上传或者Flash地址填写一项。';
- } else if ($type_id == '5') {
- $rules['content'] = 'required_without:url|mimes:swf,flv,f4v';
- $rules['url'] = 'required_without:content';
- $message['content.required_without'] = '本地上传或者填写视频地址填写一项。';
- $message['content.mimes'] = '本地上传格式不正确。';
- $message['url.required_without'] = '本地上传或者填写视频地址填写一项。';
- }
- $request->validate($rules, $message);
- $is_display = $request->input('is_display') == 'on' ? 1 : 0;
- $time = date('Y-m-d H:i:s', time());
- $started_at = $request->input('started_at') ? strtotime($request->input('started_at')) : 0;
- $ended_at = $request->input('ended_at') ? strtotime($request->input('ended_at')) : 0;
- $type_id = $request->input('type_id');
- $theme = $request->input('theme') ? $request->input('theme') : 'default';
- $note = $request->input('note') ? $request->input('note') : '';
- $form_data = [
- 'theme' => $theme,
- 'alias' => $request->input('alias'),
- 'is_display' => $is_display,
- 'category_id' => $request->input('category_id'),
- 'type_id' => $type_id,
- 'title' => $request->input('title'),
- 'note' => $note,
- 'list_order' => $request->input('list_order'),
- 'started_at' => $started_at,
- 'ended_at' => $ended_at,
- 'updated_at' => $time,
- ];
- if ($type_id == '1') {
- //文字广告
- $form_data['content'] = $request->input('content');
- $form_data['url'] = $request->input('url');
- $form_data['text_color'] = $request->input('text_color') ? $request->input('text_color') : '#000000';
- $form_data['uid'] = 0;
- } else if ($type_id == '2') {
- //图片广告
- $img_file = $request->input('img_file');
- $img_url = $request->input('img_url');
- $url = $request->input('url');
- $explain = $request->input('explain');
- $uid = $request->input('uid');
- $up_file = null;
- if ($request->hasFile('img_file')) {
- $file = 'img_file';
- $up_file = $request->$file->store(config('admin.upload.directory.image'), config('admin.upload.disk'));
- }
- $content = $up_file ? $up_file : $img_url;
- $form_data['content'] = $content;
- $form_data['url'] = $url;
- $form_data['text_color'] = '#000000';
- $form_data['uid'] = $uid;
- $form_data['explain'] = $explain;
- } else if ($type_id == '3') {
- //代码广告
- $content = $request->input('content') ? $request->input('content') : 0;
- $form_data['content'] = $content;
- $form_data['uid'] = 0;
- $form_data['text_color'] = '#000000';
- $form_data['url'] = '';
- } else if ($type_id == '4' || $type_id == '5') {
- //flash广告 、视频广告
- $url = $request->input('url') ? $request->input('url') : '';
- $up_file = null;
- if ($request->hasFile('content')) {
- $file = 'content';
- $up_file = $request->$file->store(config('admin.upload.directory.file'), config('admin.upload.disk'));
- }
- $content = $up_file ? $up_file : $url;
- $form_data['content'] = $content;
- $form_data['url'] = '';
- $form_data['uid'] = 0;
- $form_data['text_color'] = '#000000';
- }
- if (Ad::where(['id' => $request->input('id')])->update($form_data)) {
- admin_toastr(trans('admin.save_succeeded'), 'success');
- return redirect(admin_base_path() . '/content/ad/index');
- } else {
- throw new \Exception(trans('admin.save_failed'));
- }
- }
- /**
- * Create interface.
- *
- * @param Content $content
- * @return Content
- */
- public function create(Content $content)
- {
- $form = new ValueForm();
- $form->action(route('ad.index'));
- $form->text('title', '广告标题')->help('(区分不同广告条目,并不在广告中显示)')->setWidth(4)->setMustMark();
- $display_option = [
- 'on' => ['value' => 1, 'text' => '是', 'color' => 'success'],
- 'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'],
- ];
- $form->switch('is_display', '显示状态')->states($display_option)->default('1')->setMustMark();
- if (get_subsite_id() == 0) {
- $subsites = Subsite::where(['effective' => 1])->orderBy('order', 'asc')->get()->pluck('sitename', 'id');
- } else {
- $subsites = Subsite::where([['effective', '=', 1], ['id', '<>', get_subsite_id()]])->orderBy('order', 'asc')->get()->pluck('sitename', 'id')->toArray();
- $subsites['0'] = '总站';
- $subsites = collect($subsites);
- }
- if ($subsites->isNotEmpty() && get_subsite_id() == 0) {
- $form->multipleSelect('relate_subsites', '同步分站')->options($subsites);
- } else {
- $form->hidden('relate_subsites');
- }
- $form->ignore(['relate_subsites']);
- $form->hidden('subsite_id')->value(get_subsite_id());
- $cate_option = AdCategory::all()->pluck('category_name', 'id');
- $form->select('category_id', '广告位')->options($cate_option)
- ->rules('required', ['required' => '请选择广告位。'])
- ->setWidth(4)->attribute(['id' => 'sub_category'])->setMustMark();
- $form->number('list_order', '显示顺序')->min(0)->default(0)->help('(数字越大越靠前)')->setMustMark();
- $form->date('started_at', '开始日期')
- ->format('YYYY-MM-DD')
- ->rules('required|date', ['required' => '开始日期不能为空。', 'date' => '开始日期格式不正确。'])
- ->help('(设置广告起始日期,格式yyyy-mm-dd,留空为不限制起始日期)');
- $form->date('ended_at', '结束日期')
- ->format('YYYY-MM-DD')
- ->rules('required|date', ['required' => '结束日期不能为空。', 'date' => '结束日期格式不正确。'])
- ->help('(设置广告结束日期,格式yyyy-mm-dd,留空为不限制结束日期)');
- $form->textarea('note', '备注');
- $form->html("<div id='change_field'></div>")->plain();
- $form->hidden('alias')->attribute('id', 'alias');
- $form->hidden('theme')->value('default');
- $form->hidden('type_id')->attribute('id', 'type_id');
- $template = new Template();
- $template->setTemplatesId("text_div");
- $template->text('content', '文字内容')->help('(文字广告的显示内容)')->setMustMark();
- $template->url('url', '文字链接')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');
- $template->color('text_color', '文字颜色')->default('#000000')->setMustMark();
- $template->setTemplatesId("image_div");
- $template->image('img_file', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为gif/jpg/bmp/png,文件大小1000KB)')->setMustMark();
- $template->text('img_url', '或图片地址')->help('(如/images/logo.gif 或 http://www.baidu.com/img/baidu_logo.gif)');
- $template->url('url', '图片链接')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');
- $template->text('target', 'target')->help('(请输入_self等,默认_blank)');
- $template->text('explain', '图片说明文字');
- $template->number('uid', '会员UID')->min(0)->default(0)
- ->help('(设置会员UID后,当鼠标移动到图片上将会显示相关的职位和企业信息)')
- ->attribute(['maxlength' => '10', 'onkeyup' => 'if(event.keyCode !=37 && event.keyCode != 39) value=value.replace(/\D/g,\'\');', 'onbeforepaste' => "clipboardData.setData('text',clipboardData.getData('text').replace(/\D/g,''))"]);
- $template->setTemplatesId("code_div");
- $template->textarea('content', '代码')->rows(1)->help('(请直接输入需要展现的广告代码)')->setMustMark();
- $template->setTemplatesId("flash_div");
- $template->image('content', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为:swf,文件大小:1000KB)')->setMustMark();
- $template->url('url', '或者Flash地址')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');
- $template->setTemplatesId("vedio_div");
- $template->image('content', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为swf/flv/f4v,文件大小5000KB,大文件FTP上传)')->setMustMark();
- $template->url('url', '或者视频地址')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');
- $form->disableReset();
- $data['custom_form'] = $form->render();
- $data['temp'] = $template->render();
- return $content
- ->header('广告')
- ->description(' ')
- ->body(view('admin.content.ad')->with($data));
- }
- public function changeCategory(Request $request)
- {
- $cate_option = AdCategory::all()->toArray();
- return response()->json(['data' => $cate_option, 'status' => '1']);
- }
- public function store(Request $request)
- {
- $rules = [
- 'title' => 'required|max:50',
- 'is_display' => 'required',
- 'category_id' => 'required',
- 'list_order' => 'required|max:10',
- 'note' => 'max:80',
- ];
- $message = [
- 'title.required' => '广告标题不能为空。',
- 'title.max' => '广告标题长度不能超过50。',
- 'is_display.required' => '请选择显示状态。',
- 'category_id.required' => '请选择广告位。',
- 'list_order.required' => '显示顺序不能为空。',
- 'list_order.max' => '显示顺序长度不能大于10。',
- 'note.max' => '备注长度不能超过80。',
- ];
- if ($request->input('started_at')) {
- $rules['started_at'] = 'date';
- $message['started_at.date'] = '开始日期格式不正确。';
- }
- if ($request->input('ended_at')) {
- $rules['ended_at'] = 'date|after_or_equal:started_at';
- $message['ended_at.date'] = '结束日期格式不正确。';
- $message['ended_at.after_or_equal'] = '结束日期不能早于开始日期。';
- }
- $type_id = $request->input('type_id');
- if ($type_id == '1') {
- $rules['content'] = 'required';
- $rules['text_color'] = 'required';
- $message['content.required'] = '文字内容不能为空。';
- $message['text_color.required'] = '文字颜色不能为空。';
- } else if ($type_id == '2') {
- $rules['img_file'] = 'required_without:img_url|mimes:gif,jpeg,bmp,png|max:1024';
- $rules['img_url'] = 'required_without:img_file';
- $rules['explain'] = 'max:80';
- $rules['uid'] = 'nullable|numeric';
- $message['img_file.required_without'] = '本地上传或者图片地址填写一项。';
- $message['img_file.mimes'] = '本地上传格式不正确。';
- $message['img_file.max'] = '本地上传文件大小不能超过1M。';
- $message['img_url.required_without'] = '本地上传或者图片地址填写一项。';
- $message['explain.max'] = '图片说明文字长度不能大于80。';
- //$message['uid.required'] = 'UID不能为空。';
- $message['uid.numeric'] = 'UID只能填写数字。';
- } else if ($type_id == '3') {
- $rules['content'] = 'required';
- $message['content.required'] = '代码不能为空。';
- } else if ($type_id == '4') {
- $rules['content'] = 'required_without:url|mimes:swf';
- $rules['url'] = 'required_without:content';
- $message['content.required_without'] = '本地上传或者Flash地址填写一项。';
- $message['content.mimes'] = '本地上传格式不正确。';
- $message['url.required_without'] = '本地上传或者Flash地址填写一项。';
- } else if ($type_id == '5') {
- $rules['content'] = 'required_without:url|mimes:swf,flv,f4v';
- $rules['url'] = 'required_without:content';
- $message['content.required_without'] = '本地上传或者填写视频地址填写一项。';
- $message['content.mimes'] = '本地上传格式不正确。';
- $message['url.required_without'] = '本地上传或者填写视频地址填写一项。';
- }
- $request->validate($rules, $message);
- $is_display = $request->input('is_display') == 'on' ? 1 : 0;
- $time = date('Y-m-d H:i:s', time());
- $started_at = $request->input('started_at') ? strtotime($request->input('started_at')) : 0;
- $ended_at = $request->input('ended_at') ? strtotime($request->input('ended_at')) : 0;
- $subsite_id = $request->input('subsite_id');
- $theme = $request->input('theme') ? $request->input('theme') : 'default';
- $note = $request->input('note') ? $request->input('note') : '';
- $form_data = [
- 'theme' => $theme,
- 'alias' => $request->input('alias'),
- 'is_display' => $is_display,
- 'category_id' => $request->input('category_id'),
- 'type_id' => $type_id,
- 'title' => $request->input('title'),
- 'note' => $note,
- 'list_order' => $request->input('list_order'),
- 'started_at' => $started_at,
- 'ended_at' => $ended_at,
- 'subsite_id' => $subsite_id,
- 'created_at' => $time,
- 'updated_at' => $time,
- ];
- if ($type_id == '1') {
- //文字广告
- $form_data['content'] = $request->input('content');
- $form_data['url'] = $request->input('url') ? $request->input('url') : '';
- $form_data['text_color'] = $request->input('text_color') ? $request->input('text_color') : '#000000';
- $form_data['uid'] = 0;
- } else if ($type_id == '2') {
- //图片广告
- $img_file = $request->input('img_file');
- $img_url = $request->input('img_url');
- $url = $request->input('url') ? $request->input('url') : '';
- $target = $request->input('target') ? $request->input('target') : '_blank';
- $explain = $request->input('explain');
- $uid = $request->input('uid', 0);
- $up_file = null;
- if ($request->hasFile('img_file')) {
- $file = 'img_file';
- $up_file = $request->$file->store(config('admin.upload.directory.image'), config('admin.upload.disk'));
- }
- $content = $up_file ? $up_file : $img_url;
- $form_data['content'] = $content;
- $form_data['url'] = $url;
- $form_data['target'] = $target;
- $form_data['text_color'] = '#000000';
- $form_data['uid'] = $uid ? $uid : 0;
- $form_data['explain'] = $explain;
- } else if ($type_id == '3') {
- //代码广告
- $content = $request->input('content') ? $request->input('content') : 0;
- $form_data['content'] = $content;
- $form_data['uid'] = 0;
- $form_data['text_color'] = '#000000';
- $form_data['url'] = '';
- } else if ($type_id == '4' || $type_id == '5') {
- //flash广告 、视频广告
- $url = $request->input('url') ? $request->input('url') : '';
- $up_file = null;
- if ($request->hasFile('content')) {
- $file = 'content';
- $up_file = $request->$file->store(config('admin.upload.directory.file'), config('admin.upload.disk'));
- }
- $content = $up_file ? $up_file : $url;
- $form_data['content'] = $content;
- $form_data['url'] = '';
- $form_data['uid'] = 0;
- $form_data['text_color'] = '#000000';
- }
- $subsites = $request->input('relate_subsites');
- if (empty($subsites)) {
- $subsites = [];
- }
- if ($ad = Ad::create($form_data)) {
- $set_data = [];
- $set_data[] = [
- 'ad_id' => $ad->id,
- 'subsite_id' => get_subsite_id(),
- ];
- if ($subsites) {
- foreach ($subsites as $k => $v) {
- if ($v) {
- $set_data[] = [
- 'ad_id' => $ad->id,
- 'subsite_id' => $v,
- ];
- }
- }
- }
- if ($set_data) {
- SubsiteAd::insert($set_data);
- }
- admin_toastr(trans('admin.save_succeeded'), 'success');
- return redirect(admin_base_path() . '/content/ad/index');
- } else {
- throw new \Exception(trans('admin.save_failed'));
- }
- }
- /**
- * Make a grid builder.
- *
- * @return Grid
- */
- protected function grid()
- {
- $grid = new Grid(new Ad);
- $grid->model()->when(get_subsite_id() > 0, function ($query) {
- $query->where('subsite_id', get_subsite_id());
- })->orderBy('list_order', 'DESC')->orderBy('created_at', 'DESC');
- $grid->title('广告标题')->display(function () {
- $logo_html = '';
- if ($this->type_id == '2') {
- //判断图片中是否包含http
- if (preg_match('/^http/', $this->content)) {
- $logo_html = '<span class="vtip" title="<img src=\'' . $this->content . '\' height=120>">
- <img class="avatar small" src="' . $this->content . '" align="absmiddle" style="width: 22px;height: 22px;">
- </span>';
- } else {
- $logo_html = '<span class="vtip" title="<img src=\'' . upload_asset($this->content) . '\' height=120>">
- <img class="avatar small" src="' . upload_asset($this->content) . '" align="absmiddle" style="width: 22px;height: 22px;">
- </span>';
- }
- }
- return $logo_html . $this->title;
- })->width(250);
- $grid->show_category()->category_name('所属广告位')->width(200);
- $grid->type_id('广告类型')->display(function () {
- if ($this->type_id == '1') {
- return '文字';
- } else if ($this->type_id == '2') {
- return '图片';
- } else if ($this->type_id == '3') {
- return '代码';
- } else if ($this->type_id == '4') {
- return 'Flash';
- } else if ($this->type_id == '5') {
- return '视频';
- }
- });
- if (get_subsite_open()) {
- $grid->subsite_id('所属分站')->display(function () {
- $subsites = Cache::get('subsites_list');
- if (array_has($subsites, $this->subsite_id)) {
- return $subsites[$this->subsite_id]['sitename'];
- }
- return '';
- });
- }
- $grid->started_at('开始日期')->display(function () {
- if (!$this->started_at) {
- return date('Y-m-d', strtotime($this->created_at));
- } else {
- return $this->started_at;
- }
- });
- $grid->ended_at('到期日期')->display(function () {
- if ($this->ended_at > 0 && strtotime($this->ended_at) <= strtotime(date('Y-m-d'))) {
- return '<span style="color:#FF6600">已经到期</span>';
- } else {
- return $this->ended_at ? $this->ended_at : '无限制';
- }
- });
- $grid->is_display('状态')->display(function () {
- return $this->is_display ? '正常' : '暂停';
- });
- $grid->list_order('排序');
- //新增按钮
- if (Admin::user()->can('content_ad_list_create')) {
- $grid->disableCreateButton(false);
- }
- //批量删除
- if (Admin::user()->can('content_ad_list_delete')) {
- $grid->tools(function ($tools) {
- $tools->batch(function ($batch) {
- $batch->disableDelete(false);
- });
- });
- } else {
- $grid->disableRowSelector();
- }
- $grid->actions(function ($actions) {
- if (Admin::user()->can('content_ad_list_edit')) {
- if ($actions->row['subsite_id'] == get_subsite_id() || get_subsite_id() == 0) {
- $actions->disableEdit(false);
- }
- }
- if (Admin::user()->can('content_ad_list_delete')) {
- if ($actions->row['subsite_id'] == get_subsite_id() || get_subsite_id() == 0) {
- $actions->disableDelete(false);
- }
- }
- });
- $grid->filter(function (Filter $filter) {
- $filter->disableIdFilter();
- $filter->column(2 / 3, function ($filter) {
- $display_option = ['' => '不限', '1' => '正常', '0' => '暂停'];
- $filter->equal('is_display', '显示状态')->radio($display_option);
- $date1 = strtotime(date('Y-m-d', strtotime("+1 day") - 1)) - 1;
- $date3 = strtotime(date('Y-m-d', strtotime("+4 day") - 1)) - 1;
- $date7 = strtotime(date('Y-m-d', strtotime("+8 day") - 1)) - 1;
- $date_option = [
- '' => '不限',
- $date1 => '已经到期',
- $date3 => '三天内',
- $date7 => '一周内',
- ];
- $filter->where(function ($query) {
- $ended_at = "{$this->input}";
- $start = strtotime(date('Y-m-d', strtotime("+1 day") - 1)) - 1;
- $start_time = 0;
- if ($ended_at > $start) {
- $start_time = strtotime(date('Y-m-d', time())) - 1;
- }
- $query->whereRaw('ended_at > ' . $start_time . ' and ended_at < ' . "{$this->input}");
- }, '到期时间', 'ended_at')->radio($date_option);
- $subsites = Subsite::where(['effective' => 1])->orderBy('order', 'asc')->get()->pluck('sitename', 'id')->toArray();
- if ($subsites) {
- $subsites = ['' => '不限', '0' => '总站'] + $subsites;
- $filter->equal('subsite_id', '所属分站')->select($subsites);
- }
- $cates = AdCategory::get(['id', 'category_name'])->toArray();
- $pre_arr = ['id' => '', 'category_name' => '不限'];
- array_unshift($cates, $pre_arr);
- $cates = collect($cates)->pluck('category_name', 'id');
- $filter->equal('category_id', '广告位')->select($cates);
- $filter->like('title', '广告标题');
- });
- });
- return $grid;
- }
- public function getCategory(Request $request)
- {
- $subsite_id = $request->input('q');
- $where = [];
- if ($subsite_id === null) {
- $where = [];
- } else {
- $where = ['subsite_id' => $subsite_id];
- }
- $cates = AdCategory::where($where)->get(['id', 'category_name'])->toArray();
- $pre_arr = ['id' => '', 'category_name' => '不限'];
- array_unshift($cates, $pre_arr);
- return collect($cates);
- }
- /**
- * Make a show builder.
- *
- * @param mixed $id
- * @return Show
- */
- protected function detail($id)
- {
- $show = new Show(Ad::findOrFail($id));
- $ad_info = Ad::findOrFail($id);
- $show->id('ID');
- $show->title('广告标题');
- $show->is_display('显示状态')->as(function ($is_display) {
- return $is_display ? '正常' : '暂停';
- });
- if (get_subsite_open()) {
- $show->subsite_id('所属分站')->as(function ($subsite_id) {
- if ($subsite_id) {
- $Subsite = Subsite::findOrFail($subsite_id);
- return $Subsite->sitename;
- }
- return '总站';
- });
- }
- $show->category_id('广告位')->as(function ($category_id) {
- $cate_info = AdCategory::where(['id' => $category_id])->first();
- if ($cate_info) {
- return $cate_info->category_name;
- } else {
- return ' ';
- }
- });
- $show->list_order('显示顺序');
- $show->started_at('开始日期')->as(function ($started_at) {
- return $started_at ? $started_at : '无限制';
- });
- $show->ended_at('结束日期')->as(function ($ended_at) {
- return $ended_at ? $ended_at : '无限制';
- });
- $show->note('备注')->as(function ($note) {
- return $note ? $note : ' ';
- })->setEscape(false);
- if ($ad_info->type_id == '1') {
- $show->content('文字内容');
- $show->url('文字链接')->as(function ($url) {
- return $url ? $url : ' ';
- })->setEscape(false);
- $show->text_color('文字颜色')->as(function ($text_color) {
- $html = '<i style="background-color: ' . $text_color . ';padding: 5px 15px;"></i>';
- return $html;
- })->setEscape(false);
- } else if ($ad_info->type_id == '2') {
- $show->content('图片')->image();
- $show->url('图片链接')->as(function ($url) {
- return $url ? $url : ' ';
- })->setEscape(false);
- $show->explain('图片说明文字')->as(function ($explain) {
- return $explain ? $explain : ' ';
- })->setEscape(false);
- $show->uid('会员UID');
- } else if ($ad_info->type_id == '3') {
- $show->content('代码');
- } else if ($ad_info->type_id == '4') {
- $show->content('Flash地址')->image();
- } else if ($ad_info->type_id == '5') {
- $show->content('视频地址')->image();
- }
- $show->created_at('添加时间');
- $show->updated_at('更新时间');
- return $show;
- }
- /**
- * Make a form builder.
- *
- * @return Form
- */
- protected function form()
- {
- $form = new Form(new Ad);
- $form->text('title', '广告标题')->help('(区分不同广告条目,并不在广告中显示)');
- $display_option = [
- 'on' => ['value' => 1, 'text' => '是', 'color' => 'success'],
- 'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'],
- ];
- $form->switch('is_display', '显示状态')->states($display_option)->default('1');
- $subsites = array_merge(['0' => '总站'], ['1' => '定海', '2' => '普陀']);
- $form->checkbox('subsite_id', '所属分站')->options($subsites)->default('0');
- $cate_option = AdCategory::all()->pluck('category_name', 'id');
- $form->select('category_id', '广告位')->options($cate_option)->setWidth(3);
- $form->number('list_order', '显示顺序')->help('(数字越大越靠前)');
- $form->date('started_at', '开始日期')
- ->format('YYYY-MM-DD')
- ->rules('required|date', ['required' => '开始日期不能为空。', 'date' => '开始日期格式不正确。'])
- ->help('(设置广告起始日期,格式yyyy-mm-dd,留空为不限制起始日期)');
- $form->date('ended_at', '结束日期')
- ->format('YYYY-MM-DD')
- ->rules('required|date', ['required' => '结束日期不能为空。', 'date' => '结束日期格式不正确。'])
- ->help('(设置广告结束日期,格式yyyy-mm-dd,留空为不限制结束日期)');
- $form->textarea('note', '备注');
- return $form;
- }
- public function destroy($id)
- {
- $ids = [];
- if ($id) {
- $ids = explode(',', $id);
- }
- if (get_subsite_id() == 0) {
- $filter_id = $id;
- } else {
- $seletctors = Ad::where(['subsite_id' => get_subsite_id()])->whereIn('id', $ids)->get()->pluck('id')->toarray();
- if ($seletctors) {
- $filter_id = implode(',', $seletctors);
- } else {
- $filter_id = '';
- }
- }
- if ($filter_id) {
- if ($this->form()->destroy($filter_id)) {
- $data = [
- 'status' => true,
- 'message' => trans('admin.delete_succeeded'),
- ];
- } else {
- $data = [
- 'status' => false,
- 'message' => trans('admin.delete_failed'),
- ];
- }
- } else {
- $data = [
- 'status' => false,
- 'message' => '不能删除其它分站数据!',
- ];
- }
- return response()->json($data);
- }
- }
|