Proje dosyaları eklendi
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
@csrf @if(($method??'POST')!=='POST')@method($method)@endif
|
||||
@if($bulk)<div class="mb-3"><label class="form-label" for="project">{{__('keywords.fields.project')}}</label><select id="project" name="project" class="form-select @error('project') is-invalid @enderror" required>@foreach($projects as $p)<option value="{{$p->ulid}}" @selected(old('project',$project->ulid)===$p->ulid)>{{$p->name}}</option>@endforeach</select>@error('project')<div class="invalid-feedback">{{$message}}</div>@enderror</div><div class="mb-3"><label class="form-label" for="phrases">{{__('keywords.fields.phrases')}}</label><textarea id="phrases" name="phrases" rows="8" class="form-control @error('phrases') is-invalid @enderror" required placeholder="{{__('keywords.placeholder')}}">{{old('phrases')}}</textarea><div class="form-text">{{__('keywords.bulk_limit',['count'=>100])}}</div>@error('phrases')<div class="invalid-feedback">{{$message}}</div>@enderror</div>@else<div class="mb-3"><label class="form-label" for="phrase">{{__('keywords.fields.phrase')}}</label><input id="phrase" name="phrase" maxlength="190" required class="form-control @error('phrase') is-invalid @enderror" value="{{old('phrase',$keyword->phrase)}}">@error('phrase')<div class="invalid-feedback">{{$message}}</div>@enderror</div>@endif
|
||||
<div class="row g-3 mb-4">@if($bulk)<div class="col-md-3"><label class="form-label">{{__('keywords.fields.engine')}}</label><select name="search_engine" class="form-select"><option value="google">Google</option></select></div>@endif<div class="col-md-3"><label class="form-label">{{__('keywords.fields.country')}}</label><select name="country_code" class="form-select">@foreach($countries as $v=>$l)<option value="{{$v}}" @selected(old('country_code',$keyword->country_code??'TR')===$v)>{{$l}}</option>@endforeach</select></div><div class="col-md-3"><label class="form-label">{{__('keywords.fields.language')}}</label><select name="language_code" class="form-select">@foreach($languages as $v=>$l)<option value="{{$v}}" @selected(old('language_code',$keyword->language_code??'tr')===$v)>{{$l}}</option>@endforeach</select></div><div class="col-md-3"><label class="form-label">{{__('keywords.fields.device')}}</label><select name="device" class="form-select">@foreach(\App\Enums\KeywordDevice::cases() as $v)<option value="{{$v->value}}" @selected(old('device',$keyword->device->value??'desktop')===$v->value)>{{$v->label()}}</option>@endforeach</select></div>@unless($bulk)<div class="col-md-3"><label class="form-label" for="status">{{__('keywords.status')}}</label><select id="status" name="status" required class="form-select @error('status') is-invalid @enderror"><option value="active" @selected(old('status',$keyword->status->value)==='active')>{{__('states.active')}}</option><option value="inactive" @selected(old('status',$keyword->status->value)==='inactive')>{{__('states.inactive')}}</option></select>@error('status')<div class="invalid-feedback">{{$message}}</div>@enderror</div>@endunless</div><button class="btn btn-primary">{{$submit}}</button> <a class="btn btn-link" href="{{route('keywords.index',['project'=>$project->ulid])}}">{{__('keywords.cancel')}}</a>
|
||||
@@ -0,0 +1 @@
|
||||
<x-layouts.app :title="__('keywords.add').' — TrafficPumper'"><x-customer-shell><header class="tp-page-header"><div><p>{{__('keywords.title')}}</p><h1>{{__('keywords.add')}}</h1><span>{{__('keywords.bulk_help')}}</span></div></header><section class="tp-panel tp-form-panel"><form method="POST" action="{{route('keywords.store')}}">@include('keywords._form',['submit'=>__('keywords.create'),'bulk'=>true])</form></section></x-customer-shell></x-layouts.app>
|
||||
@@ -0,0 +1 @@
|
||||
<x-layouts.app :title="__('keywords.edit').' — TrafficPumper'"><x-customer-shell><header class="tp-page-header"><div><p>{{$project->name}}</p><h1>{{__('keywords.edit')}}</h1></div></header><section class="tp-panel tp-form-panel"><form method="POST" action="{{route('keywords.update',$keyword)}}">@include('keywords._form',['submit'=>__('keywords.save'),'method'=>'PUT','bulk'=>false])</form></section></x-customer-shell></x-layouts.app>
|
||||
@@ -0,0 +1,12 @@
|
||||
<x-layouts.app :title="__('keywords.title').' — TrafficPumper'"><x-customer-shell>
|
||||
<header class="tp-page-header"><div><p>{{__('customer.rank_tracking')}}</p><h1>{{__('keywords.title')}}</h1><span>{{__('keywords.description')}}</span></div><a class="btn btn-primary" href="{{route('keywords.create',['project'=>$projectUlid])}}">+ {{__('keywords.add')}}</a></header>
|
||||
@if(session('status'))<div class="alert alert-success">{{session('status')}}</div>@endif
|
||||
<section class="tp-metric-grid tp-keyword-metrics"><x-metric-card :label="__('keywords.metrics.total')" :value="$summary['total']" icon="⌕"/><x-metric-card :label="__('keywords.metrics.active')" :value="$summary['active']" icon="●"/><x-metric-card :label="__('customer.top10')" :value="$summary['top10']" icon="↗"/><x-metric-card :label="__('customer.average_rank')" :value="$summary['average']" icon="◎"/><x-metric-card :label="__('customer.rising')" :value="$summary['winners']" icon="↑"/><x-metric-card :label="__('customer.falling')" :value="$summary['losers']" icon="↓"/></section>
|
||||
<section class="tp-panel"><form method="GET" class="tp-keyword-filters"><input class="form-control" name="q" value="{{request('q')}}" placeholder="{{__('keywords.search')}}"><select class="form-select" name="project"><option value="">{{__('customer.all_projects')}}</option>@foreach($projects as $p)<option value="{{$p->ulid}}" @selected($projectUlid===$p->ulid)>{{$p->name}}</option>@endforeach</select><select class="form-select" name="status"><option value="" @selected(!request()->filled('status'))>{{__('keywords.view_all')}}</option><option value="active" @selected(request('status')==='active')>{{__('states.active')}}</option><option value="inactive" @selected(request('status')==='inactive')>{{__('states.inactive')}}</option><option value="archived" @selected(request('status')==='archived')>{{__('states.archived')}}</option></select><select class="form-select" name="country"><option value="">{{__('keywords.fields.country')}}</option>@foreach($countries as $v=>$l)<option value="{{$v}}" @selected(request('country')===$v)>{{$l}}</option>@endforeach</select><select class="form-select" name="device"><option value="">{{__('keywords.fields.device')}}</option>@foreach(\App\Enums\KeywordDevice::cases() as $v)<option value="{{$v->value}}" @selected(request('device')===$v->value)>{{$v->label()}}</option>@endforeach</select><button class="btn btn-outline-primary">{{__('keywords.filter')}}</button></form></section>
|
||||
<section class="tp-panel"><div class="table-responsive"><table class="table tp-data-table"><thead><tr><th>{{__('keywords.keyword')}}</th><th>{{__('keywords.project')}}</th><th>{{__('keywords.current')}}</th><th>{{__('keywords.previous')}}</th><th>{{__('keywords.change')}}</th><th>{{__('keywords.target')}}</th><th>{{__('keywords.status')}}</th><th>{{__('keywords.last_check')}}</th><th>{{__('keywords.actions')}}</th></tr></thead><tbody>
|
||||
@forelse($keywords as $keyword)<tr><td><a href="{{route('keywords.show',$keyword)}}">{{$keyword->phrase}}</a></td><td>{{$keyword->project->name}}</td><td>{{$keyword->current_rank?'#'.$keyword->current_rank:'—'}}</td><td>{{$keyword->previous_rank?'#'.$keyword->previous_rank:'—'}}</td><td>@if($keyword->movement==='winner')<span class="tp-rank-up" aria-label="{{__('keywords.winner')}}">↑ +{{$keyword->rank_change}}</span>@elseif($keyword->movement==='loser')<span class="tp-rank-down" aria-label="{{__('keywords.loser')}}">↓ {{$keyword->rank_change}}</span>@elseif($keyword->movement==='unchanged')<span>= {{__('customer.unchanged')}}</span>@else<span>{{__('customer.new')}}</span>@endif</td><td>{{$keyword->search_engine->label()}} · {{$keyword->country_code}}/{{$keyword->language_code}} · {{$keyword->device->label()}}</td>
|
||||
<td>@if($keyword->status===\App\Enums\KeywordStatus::Archived)<span class="badge text-bg-secondary">{{__('states.archived')}}</span>@else<form method="POST" action="{{route('keywords.status',$keyword)}}" class="d-inline">@csrf @method('PATCH')<input type="hidden" name="status" value="{{$keyword->status===\App\Enums\KeywordStatus::Active?'inactive':'active'}}"><button class="btn btn-sm {{$keyword->status===\App\Enums\KeywordStatus::Active?'btn-success':'btn-outline-secondary'}}" aria-label="{{__('keywords.status')}}: {{$keyword->status->label()}}">{{$keyword->status===\App\Enums\KeywordStatus::Active?'●':'○'}} {{$keyword->status->label()}}</button></form>@endif</td>
|
||||
<td>{{$keyword->last_checked_at?->diffForHumans()??__('keywords.not_checked')}}</td><td><div class="d-flex gap-1">@if($keyword->status!==\App\Enums\KeywordStatus::Archived)<a class="btn btn-sm btn-outline-secondary" href="{{route('keywords.edit',$keyword)}}">{{__('keywords.edit')}}</a><form method="POST" action="{{route('keywords.archive',$keyword)}}" onsubmit="return confirm('{{__('keywords.archive_confirm')}}')">@csrf<button class="btn btn-sm btn-outline-danger">{{__('keywords.archive')}}</button></form>@else<form method="POST" action="{{route('keywords.restore',$keyword)}}">@csrf<button class="btn btn-sm btn-outline-primary">{{__('keywords.restore')}}</button></form>@endif</div></td></tr>
|
||||
@empty<tr><td colspan="9"><x-empty-state :title="__('keywords.empty')" :description="__('keywords.empty_help')"/></td></tr>@endforelse
|
||||
</tbody></table></div><div class="mt-3">{{$keywords->links()}}</div></section>
|
||||
</x-customer-shell></x-layouts.app>
|
||||
@@ -0,0 +1,4 @@
|
||||
<x-layouts.app :title="$keyword->phrase.' — TrafficPumper'"><x-customer-shell><nav aria-label="breadcrumb"><ol class="breadcrumb"><li class="breadcrumb-item"><a href="{{route('keywords.index',['project'=>$keyword->project->ulid])}}">{{__('keywords.title')}}</a></li><li class="breadcrumb-item active">{{$keyword->phrase}}</li></ol></nav><header class="tp-page-header"><div><p>{{$keyword->project->name}} · {{$keyword->project->domain}}</p><h1>{{$keyword->phrase}}</h1><span>{{$keyword->status->label()}}</span></div>@if($keyword->status===\App\Enums\KeywordStatus::Active)<a class="btn btn-outline-secondary" href="{{route('keywords.edit',$keyword)}}">{{__('keywords.edit')}}</a>@endif</header>
|
||||
<section class="tp-metric-grid tp-keyword-metrics"><x-metric-card :label="__('keywords.current')" :value="$keyword->current_rank?'#'.$keyword->current_rank:'—'" icon="◎"/><x-metric-card :label="__('keywords.previous')" :value="$keyword->previous_rank?'#'.$keyword->previous_rank:'—'" icon="◷"/><x-metric-card :label="__('keywords.change')" :value="$keyword->rank_change??__('customer.new')" icon="↕"/><x-metric-card :label="__('keywords.best')" :value="$best?'#'.$best:'—'" icon="★"/><x-metric-card :label="__('keywords.last_check')" :value="$keyword->last_checked_at?->diffForHumans()" icon="◴"/><x-metric-card :label="__('keywords.status')" :value="$keyword->status->label()" icon="●"/></section>
|
||||
<div class="tp-two-columns"><section class="tp-panel"><div class="tp-panel-heading"><h2>{{__('keywords.details')}}</h2></div><dl class="tp-detail-list"><div><dt>{{__('keywords.project')}}</dt><dd>{{$keyword->project->name}}</dd></div><div><dt>{{__('keywords.domain')}}</dt><dd>{{$keyword->project->domain}}</dd></div><div><dt>{{__('keywords.target')}}</dt><dd>{{$keyword->search_engine->label()}} · {{$countries[$keyword->country_code]}} · {{$languages[$keyword->language_code]}} · {{$keyword->device->label()}}</dd></div><div><dt>{{__('keywords.created')}}</dt><dd>{{$keyword->created_at->translatedFormat('d M Y H:i')}}</dd></div></dl></section><section class="tp-panel"><div class="tp-panel-heading"><h2>{{__('keywords.history')}}</h2></div>@if($history->isEmpty())<x-empty-state :title="__('customer.no_rank_data')" :description="__('customer.after_first_check')"/>@else<div class="tp-history-list">@foreach($history as $point)<div><time>{{\Illuminate\Support\Carbon::parse($point['date'])->translatedFormat('d M Y')}}</time><span style="--rank:{{min($point['rank'],100)}}"></span><strong>#{{$point['rank']}}</strong></div>@endforeach</div>@endif</section></div>
|
||||
<section class="tp-panel"><div class="tp-panel-heading"><h2>{{__('keywords.recent_checks')}}</h2></div><div class="table-responsive"><table class="table tp-data-table"><thead><tr><th>{{__('keywords.last_check')}}</th><th>{{__('keywords.current')}}</th><th>{{__('keywords.results')}}</th></tr></thead><tbody>@forelse($keyword->serpChecks->take(10) as $check)<tr><td>{{$check->checked_at?->translatedFormat('d M Y H:i')}}</td><td>{{$check->results->firstWhere('is_project_domain',true)?->position?'#'.$check->results->firstWhere('is_project_domain',true)->position:'100+'}}</td><td>{{$check->result_count}}</td></tr>@empty<tr><td colspan="3">{{__('keywords.not_checked')}}</td></tr>@endforelse</tbody></table></div></section></x-customer-shell></x-layouts.app>
|
||||
Reference in New Issue
Block a user