Initial commit
This commit is contained in:
67
resources/views/errors/404.blade.php
Normal file
67
resources/views/errors/404.blade.php
Normal file
@@ -0,0 +1,67 @@
|
||||
@extends('themes::layout')
|
||||
@php
|
||||
$menu = \VsMov\Core\Models\Menu::getTree();
|
||||
$tops = Cache::remember('site.movies.tops', setting('site_cache_ttl', 5 * 60), function () {
|
||||
$lists = preg_split('/[\n\r]+/', get_theme_option('hotest'));
|
||||
$data = [];
|
||||
foreach ($lists as $list) {
|
||||
if (trim($list)) {
|
||||
$list = explode('|', $list);
|
||||
[$label, $relation, $field, $val, $sortKey, $alg, $limit, $template] = array_merge($list, ['Phim hot', '', 'type', 'series', 'view_week', 'desc', 4, 'top_text']);
|
||||
try {
|
||||
$data[] = [
|
||||
'label' => $label,
|
||||
'template' => $template,
|
||||
'data' => \VsMov\Core\Models\Movie::when($relation, function ($query) use ($relation, $field, $val) {
|
||||
$query->whereHas($relation, function ($rel) use ($field, $val) {
|
||||
$rel->where($field, $val);
|
||||
});
|
||||
})
|
||||
->when(!$relation, function ($query) use ($field, $val) {
|
||||
$query->where($field, $val);
|
||||
})
|
||||
->orderBy($sortKey, $alg)
|
||||
->limit($limit)
|
||||
->get(),
|
||||
];
|
||||
} catch (\Exception $e) {
|
||||
# code
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
});
|
||||
@endphp
|
||||
|
||||
@push('header')
|
||||
<meta name="theme-color" content="#e7b53a">
|
||||
<script type='text/javascript' src='{{ asset('/themes/kiss/js/jquery.min.js') }}' id='jquery-js'></script>
|
||||
<link rel="stylesheet" href="{{ asset('/themes/kiss/css/style.css') }}">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Fira+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"
|
||||
rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" />
|
||||
@endpush
|
||||
|
||||
@section('body')
|
||||
<div id='shadow'></div>
|
||||
<div class="mainholder">
|
||||
@include('themes::themekiss.inc.header')
|
||||
<div id="content">
|
||||
<div class="wrapper">
|
||||
<div class="notf"> <img src="/themes/kiss/images/404.png"></div>
|
||||
</div>
|
||||
</div>
|
||||
{!! get_theme_option('footer') !!}
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
@endpush
|
||||
|
||||
@section('footer')
|
||||
<script type='text/javascript' src='{{ asset('/themes/kiss/js/app_2.js') }}' id='qtip-js'></script>
|
||||
{!! setting('site_scripts_google_analytics') !!}
|
||||
@endsection
|
||||
74
resources/views/themekiss/catalog.blade.php
Normal file
74
resources/views/themekiss/catalog.blade.php
Normal file
@@ -0,0 +1,74 @@
|
||||
@extends('themes::themekiss.layout')
|
||||
|
||||
@php
|
||||
$years = Cache::remember('all_years', \Backpack\Settings\app\Models\Setting::get('site_cache_ttl', 5 * 60), function () {
|
||||
return \VsMov\Core\Models\Movie::select('publish_year')
|
||||
->distinct()
|
||||
->pluck('publish_year')
|
||||
->sortDesc();
|
||||
});
|
||||
@endphp
|
||||
|
||||
@section('breadcrumb')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="bixbox bixboxarc bbnofrm">
|
||||
<div class="releases">
|
||||
<h1><span>{{ $section_name }}</span></h1>
|
||||
</div>
|
||||
<div class="mrgn">
|
||||
<div class="advancedsearch">
|
||||
@include('themes::themekiss.inc.catalog_filter')
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<div class="listupd">
|
||||
@if (count($data))
|
||||
@foreach ($data as $movie)
|
||||
<article class="bs" itemscope="itemscope" itemtype="http://schema.org/CreativeWork">
|
||||
<div class="bsx"><a href="{{ $movie->getUrl() }}" itemprop="url"
|
||||
title="{{ $movie->name }} ({{ $movie->origin_name }}) [{{ $movie->publish_year }}]"
|
||||
class="tip" rel="{{ $movie->id }}">
|
||||
<div class="limit">
|
||||
@if ($movie->is_recommended)
|
||||
<div class="hotbadge"><i class="fas fa-fire-alt"></i></div>
|
||||
@endif
|
||||
@if ($movie->type == 'series' && $movie->status == 'completed')
|
||||
<div class="status Completed">Trọn bộ</div>
|
||||
@endif
|
||||
<div class="typez {{ $movie->type == 'series' ? 'Drama' : 'Movie' }}">
|
||||
{{ $movie->type == 'series' ? 'Phim bộ' : 'Phim lẻ' }}</div>
|
||||
<div class="ply"><i class="far fa-play-circle"></i></div>
|
||||
<div class="bt"><span class="epx">{{ $movie->episode_current }}</span> <span
|
||||
class="sb Soft Sub">{{ $movie->language }}</span></div>
|
||||
<img src="{{ $movie->getThumbUrl() }}"
|
||||
class="ts-post-image wp-post-image attachment-medium size-medium" loading="lazy"
|
||||
itemprop="image"
|
||||
title="{{ $movie->name }} ({{ $movie->origin_name }}) [{{ $movie->publish_year }}]"
|
||||
alt="{{ $movie->name }} ({{ $movie->origin_name }}) [{{ $movie->publish_year }}]"
|
||||
width="240" height="300" />
|
||||
</div>
|
||||
<div class="ttt">
|
||||
<div class="tt"> {{ $movie->name }}<h2 itemprop="headline">
|
||||
{{ $movie->origin_name }} {{ $movie->episode_current }}</h2>
|
||||
</div>
|
||||
<div class="timeago"> {{ $movie->origin_name }}</div>
|
||||
</div>
|
||||
</a></div>
|
||||
</article>
|
||||
@endforeach
|
||||
@else
|
||||
<p>Không có dữ liệu cho mục này!</p>
|
||||
@endif
|
||||
</div>
|
||||
{{ $data->appends(request()->all())->links('themes::themekiss.inc.pagination') }}
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script type='text/javascript' src='{{ asset('/themes/kiss/js/filter.js') }}' id='filter-js'></script>
|
||||
@endpush
|
||||
587
resources/views/themekiss/episode.blade.php
Normal file
587
resources/views/themekiss/episode.blade.php
Normal file
@@ -0,0 +1,587 @@
|
||||
@extends('themes::themekiss.layout')
|
||||
|
||||
@push('header')
|
||||
<script>
|
||||
function tsMedia(e) {
|
||||
e.matches ? jQuery("#singlepisode").appendTo(jQuery("#mobilepisode")) : jQuery("#singlepisode").prependTo(
|
||||
jQuery("#mainepisode")), tsMediaPickList()
|
||||
}
|
||||
|
||||
function tsMediaSetEpNow() {
|
||||
jQuery(document).find("#singlepisode .headlist .det em.epnow").replaceWith(tsMediaEpNow || "?"),
|
||||
tsMediaSetEpNow = function() {}
|
||||
}
|
||||
|
||||
function tsMediaPickList() {
|
||||
jQuery(document).find(".episodelist ul li").each(function(e, t) {
|
||||
t.getAttribute("data-id") == tsMediaSelectedId && (t.className = "selected", t.setAttribute(
|
||||
"selected", "selected"))
|
||||
}), tsMediaShowItem(), tsMediaSetPlayIcon(), tsMediaSetEpNow()
|
||||
}
|
||||
|
||||
function tsMediaShowItem() {
|
||||
var e = jQuery(document).find(".episodelist ul li.selected").get(0);
|
||||
e.parentNode.scrollTop = e.offsetTop - $(e).height()
|
||||
}
|
||||
|
||||
function tsMediaSetPlayIcon() {
|
||||
jQuery(document).find(".episodelist ul li .thumbnel .nowplay").remove(), jQuery(document).find(
|
||||
".episodelist ul li.selected .thumbnel").append(
|
||||
'<div class="nowplay"><i class="far fa-play-circle"></i></div>')
|
||||
}
|
||||
var tsmmedia = matchMedia("(max-width: 880px)");
|
||||
"addEventListener" in tsmmedia ? tsmmedia.addEventListener("change", tsMedia) : tsmmedia.addListener(tsMedia);
|
||||
</script>
|
||||
@endpush
|
||||
|
||||
@section('mainepisode')
|
||||
@include('themes::themekiss.inc.mainepisode')
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<article id="post-{{ $currentMovie->id }}" class="post-{{ $currentMovie->id }} hentry" itemscope="itemscope"
|
||||
itemtype="http://schema.org/Episode">
|
||||
<div class="ts-breadcrumb bixbox">
|
||||
<ol itemscope="" itemtype="http://schema.org/BreadcrumbList">
|
||||
<li itemprop="itemListElement" itemscope="" itemtype="http://schema.org/ListItem"><a itemprop="item"
|
||||
href="/"><span itemprop="name">Xem phim</span></a>
|
||||
<meta itemprop="position" content="1">
|
||||
</li>
|
||||
›
|
||||
<li itemprop="itemListElement" itemscope="" itemtype="http://schema.org/ListItem"><a itemprop="item"
|
||||
href="{{ $currentMovie->getUrl() }}"><span itemprop="name">{{ $currentMovie->name }}</span></a>
|
||||
<meta itemprop="position" content="2">
|
||||
</li>
|
||||
›
|
||||
<li itemprop="itemListElement" itemscope="" itemtype="http://schema.org/ListItem"><a itemprop="item"
|
||||
href=""><span itemprop="name">Tập {{ $episode->name }}</span></a>
|
||||
<meta itemprop="position" content="3">
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div class="megavid">
|
||||
<div class="mvelement">
|
||||
<div class="item meta">
|
||||
<div class="tb" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
|
||||
<img src="{{$currentMovie->getThumbUrl()}}"
|
||||
class="ts-post-image wp-post-image attachment-medium size-medium" loading="lazy" width="169"
|
||||
height="300" />
|
||||
<meta itemprop="url"
|
||||
content="{{$currentMovie->getThumbUrl()}}">
|
||||
<meta itemprop="width" content="190">
|
||||
<meta itemprop="height" content="260">
|
||||
</div>
|
||||
<div class="lm">
|
||||
<h1 class="entry-title" itemprop="name">{{ $currentMovie->name }} Tập {{ $episode->name }}</h1>
|
||||
|
||||
<div class="box-rating">
|
||||
<div class="rate-title">
|
||||
<span class="rate-lable"></span>
|
||||
</div>
|
||||
<div id="div_average" style="">
|
||||
<span class="average" id="average" itemprop="ratingValue">
|
||||
{{$currentMovie->getRatingStar()}}
|
||||
</span>
|
||||
điểm
|
||||
/
|
||||
<span id="rate_count" itemprop="reviewCount">{{$currentMovie->getRatingCount()}}</span> lượt đánh giá
|
||||
</div>
|
||||
<div id="star" data-score="{{$currentMovie->getRatingStar()}}"
|
||||
style="cursor: pointer;">
|
||||
</div>
|
||||
<div>
|
||||
<span id="hint"></span>
|
||||
<meta itemprop="bestRating" content="10" />
|
||||
<meta itemprop="worstRating" content="1" />
|
||||
<meta itemprop="ratingValue" content="{{$currentMovie->getRatingStar()}}" />
|
||||
<meta itemprop="ratingCount" content="{{$currentMovie->getRatingCount()}}" />
|
||||
</div>
|
||||
</div>
|
||||
<span class="epx"> <span class="lg">{{ $currentMovie->language }}</span></span> <span
|
||||
class="year"> <i class="status Hard Sub">{{ $currentMovie->language }}</i> Updated on <span
|
||||
class="updated">{{ $currentMovie->updated_at }}</span> · <span
|
||||
id="ts-ep-view">{{ $currentMovie->view_total }} lượt xem</span></span>
|
||||
</div>
|
||||
<div class="sosmed"><a
|
||||
href="https://www.facebook.com/sharer/sharer.php?u={{ $currentMovie->getUrl() }}&t={{ $currentMovie->name }}"
|
||||
aria-label="Share on Facebook"><span class="fab fa-facebook-f" aria-hidden="true"></span></a> <a
|
||||
href="https://www.twitter.com/intent/tweet?url={{ $currentMovie->getUrl() }}&text={{ $currentMovie->name }}"
|
||||
aria-label="Share on Twitter"><span class="fab fa-twitter" aria-hidden="true"></span></a> <a
|
||||
href="whatsapp://send?text={{ $currentMovie->name }} {{ $currentMovie->getUrl() }}"
|
||||
aria-label="Share on Whatsapp"><span class="fab fa-whatsapp" aria-hidden="true"></span></a>
|
||||
</div>
|
||||
</div>
|
||||
@if ($currentMovie->notify && $currentMovie->notify != '')
|
||||
<div class="bixbox infx"><strong>Thông báo: </strong>{{ strip_tags($currentMovie->notify) }}
|
||||
</div>
|
||||
@endif
|
||||
@if ($currentMovie->showtimes && $currentMovie->showtimes != '')
|
||||
<div class="bixbox infx"><strong>Lịch chiếu: </strong>{{ strip_tags($currentMovie->showtimes) }}
|
||||
</div>
|
||||
@endif
|
||||
<div class="video-content">
|
||||
<div class="lowvid">
|
||||
<div class="media-player" id="pembed">
|
||||
<p style="text-align: center;">Đang tải, đợi tí nhé ...</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item video-nav">
|
||||
<div class="mobius">
|
||||
<div class="iconx">
|
||||
<div class="icol report">
|
||||
<i class="fa fa-bug"></i>
|
||||
<span>Báo Lỗi</span>
|
||||
</div>
|
||||
<div class="icol expand">
|
||||
<i class="fa fa-expand" aria-hidden="true"></i>
|
||||
<span>Expand</span>
|
||||
</div>
|
||||
<div class="icol light">
|
||||
<i class="far fa-lightbulb"></i>
|
||||
<span>Turn Off Light</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="change-server">
|
||||
<center>
|
||||
<ul class="server-list">
|
||||
<li class="backup-server"> <span class="server-title">Đổi Nguồn Phát</span>
|
||||
<ul class="list-episode">
|
||||
<li class="episode">
|
||||
@foreach ($currentMovie->episodes->where('slug', $episode->slug)->where('server', $episode->server) as $server)
|
||||
<a data-id="{{ $server->id }}" data-link="{{ $server->link }}"
|
||||
data-type="{{ $server->type }}" onclick="chooseStreamingServer(this)"
|
||||
class="streaming-server btn-link-backup btn-episode black episode-link">Nguồn Phát
|
||||
#{{ $loop->index + 1 }}</a>
|
||||
@endforeach
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<div id="mobilepisode"></div>
|
||||
<div class="single-info bixbox">
|
||||
<div class="thumb"><img
|
||||
src="{{ $currentMovie->getThumbUrl() }}"
|
||||
class="ts-post-image wp-post-image attachment-medium size-medium" loading="lazy" itemprop="image"
|
||||
title="{{ $currentMovie->name }}" alt="{{ $currentMovie->name }}" width="169" height="300" /></div>
|
||||
<div class="infox">
|
||||
<div class="infolimit">
|
||||
<h2 itemprop="partOfSeries">{{ $currentMovie->name }}</h2> <span class="alter">Tên khác: {{ $currentMovie->origin_name }}</span>
|
||||
</div>
|
||||
<div class="rating"><strong>Rating {{ number_format($currentMovie->ratting_star, 1) == 0.0 ? '8.0' : number_format($currentMovie->ratting_star, 1) }}</strong>
|
||||
<div class="rating-prc">
|
||||
<div class="rtp">
|
||||
<div class="rtb"><span style="width:{{ (number_format($currentMovie->ratting_star, 1) == 0.0 ? '8.0' : number_format($currentMovie->ratting_star, 1)) * 10 }}%"></span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-content">
|
||||
<div class="spe">
|
||||
<span>
|
||||
<b>Status:</b> {{ $currentMovie->status }} </span>
|
||||
<span class="split">
|
||||
<b>Năm phát hành:</b> {{ $currentMovie->publish_year }} </span>
|
||||
<span>
|
||||
<b>Thời lượng:</b> {{ $currentMovie->episode_time }} </span>
|
||||
<span>
|
||||
<b>Quốc gia:</b>
|
||||
{!! $currentMovie->regions->map(function ($region) {
|
||||
return '<a href="' .
|
||||
$region->getUrl() .
|
||||
'" tite="Phim ' .
|
||||
$region->name .
|
||||
' rel="tag"">' .
|
||||
$region->name .
|
||||
'</a>';
|
||||
})->implode(', ') !!}
|
||||
</span>
|
||||
<span>
|
||||
<b>Định dạng:</b> {{ $currentMovie->type == 'series' ? 'Phim bộ' : 'Phim lẻ' }} </span>
|
||||
<span>
|
||||
<b>Số tập:</b> {{ $currentMovie->episode_total }} </span>
|
||||
<span class="split">
|
||||
<b>Đạo diễn:</b>
|
||||
{!! $currentMovie->directors->map(function ($director) {
|
||||
return '<a href="' .
|
||||
$director->getUrl() .
|
||||
'" tite="Đạo diễn ' .
|
||||
$director->name .
|
||||
' rel="tag"">' .
|
||||
$director->name .
|
||||
'</a>';
|
||||
})->implode(', ') !!}
|
||||
</span>
|
||||
<span class="split">
|
||||
<b>Diễn viên:</b>
|
||||
{!! $currentMovie->actors->map(function ($actor) {
|
||||
return '<a href="' .
|
||||
$actor->getUrl() .
|
||||
'" tite="diễn viên ' .
|
||||
$actor->name .
|
||||
' rel="tag"">' .
|
||||
$actor->name .
|
||||
'</a>';
|
||||
})->implode(', ') !!}
|
||||
</span>
|
||||
<span class="split">
|
||||
<b>Chất lượng:</b>
|
||||
{{ $currentMovie->quality }} {{ $currentMovie->language }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="genxed">
|
||||
{!! $currentMovie->categories->map(function ($category) {
|
||||
return '<a href="' .
|
||||
$category->getUrl() .
|
||||
'" tite="Phim ' .
|
||||
$category->name .
|
||||
' rel="tag"">' .
|
||||
$category->name .
|
||||
'</a>';
|
||||
})->implode('') !!}
|
||||
</div>
|
||||
<div class="desc mindes">{!! $currentMovie->content !!} <span class="colap"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@include('themes::themekiss.inc.comment')
|
||||
@include('themes::themekiss.inc.movie_related')
|
||||
</article>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$("#shadow").css("height", $(document).height()).hide();
|
||||
$(".light").click(function() {
|
||||
$("#shadow").toggle();
|
||||
if ($("#shadow").is(":hidden")) {
|
||||
$(".video-content").css({'z-index':'0'})
|
||||
$(this).html(
|
||||
"<i class='far fa-lightbulb' aria-hidden='true'></i> <span>Turn Off Light</span>")
|
||||
.removeClass("turnedOff");
|
||||
} else {
|
||||
$(".video-content").css({'z-index':'1000'})
|
||||
$(this).html(
|
||||
"<i class='fas fa-lightbulb' aria-hidden='true'></i> <span>Turn On Light</span>")
|
||||
.addClass("turnedOff");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<script src="/themes/kiss/player/js/p2p-media-loader-core.min.js"></script>
|
||||
<script src="/themes/kiss/player/js/p2p-media-loader-hlsjs.min.js"></script>
|
||||
|
||||
<script src="/js/jwplayer-8.9.3.js"></script>
|
||||
<script src="/js/hls.min.js"></script>
|
||||
<script src="/js/jwplayer.hlsjs.min.js"></script>
|
||||
|
||||
<script type="text/javascript" src="{{ asset('/themes/kiss/plugins/jquery-raty/jquery.raty.js') }}"></script>
|
||||
|
||||
<script>
|
||||
var rated = false;
|
||||
$('#star').raty({
|
||||
score: {{$currentMovie->getRatingStar()}},
|
||||
number: 10,
|
||||
numberMax: 10,
|
||||
hints: ['quá tệ', 'tệ', 'không hay', 'không hay lắm', 'bình thường', 'xem được', 'có vẻ hay', 'hay',
|
||||
'rất hay', 'siêu phẩm'
|
||||
],
|
||||
starOff: '/themes/kiss/plugins/jquery-raty/images/star-off.png',
|
||||
starOn: '/themes/kiss/plugins/jquery-raty/images/star-on.png',
|
||||
starHalf: '/themes/kiss/plugins/jquery-raty/images/star-half.png',
|
||||
click: function(score, evt) {
|
||||
if (rated) return
|
||||
fetch("{{ route('movie.rating', ['movie' => $currentMovie->slug]) }}", {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
'X-CSRF-TOKEN': document.querySelector(
|
||||
'meta[name="csrf-token"]')
|
||||
.getAttribute(
|
||||
'content')
|
||||
},
|
||||
body: JSON.stringify({
|
||||
rating: score
|
||||
})
|
||||
}).then((response) => response.json()).then((data) => {
|
||||
$('#rate_count').html(data.rating_count);
|
||||
$('#average').html(data.rating_star);
|
||||
rated = true;
|
||||
$('#star').data('raty').readOnly(true);
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('html, body').animate({
|
||||
scrollTop: $('.megavid').offset().top
|
||||
}, 'slow');
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var episode_id = {{ $episode->id }};
|
||||
const wrapper = document.getElementById('pembed');
|
||||
const vastAds = "{{ Setting::get('jwplayer_advertising_file') }}";
|
||||
|
||||
function chooseStreamingServer(el) {
|
||||
const type = el.dataset.type;
|
||||
const link = el.dataset.link.replace(/^http:\/\//i, 'https://');
|
||||
const id = el.dataset.id;
|
||||
|
||||
const newUrl =
|
||||
location.protocol +
|
||||
"//" +
|
||||
location.host +
|
||||
location.pathname.replace(`-${episode_id}`, `-${id}`);
|
||||
|
||||
history.pushState({
|
||||
path: newUrl
|
||||
}, "", newUrl);
|
||||
episode_id = id;
|
||||
|
||||
|
||||
Array.from(document.getElementsByClassName('streaming-server')).forEach(server => {
|
||||
server.classList.remove('active');
|
||||
})
|
||||
el.classList.add('active');
|
||||
|
||||
renderPlayer(type, link, id);
|
||||
}
|
||||
|
||||
function renderPlayer(type, link, id) {
|
||||
if (type == 'embed') {
|
||||
if (vastAds) {
|
||||
wrapper.innerHTML = `<div id="fake_jwplayer" style="height: 100%"></div>`;
|
||||
const fake_player = jwplayer("fake_jwplayer");
|
||||
const objSetupFake = {
|
||||
key: "{{ Setting::get('jwplayer_license') }}",
|
||||
aspectratio: "16:9",
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
file: "/themes/kiss/player/1s_blank.mp4",
|
||||
volume: 100,
|
||||
mute: false,
|
||||
autostart: true,
|
||||
advertising: {
|
||||
tag: "{{ Setting::get('jwplayer_advertising_file') }}",
|
||||
client: "vast",
|
||||
vpaidmode: "insecure",
|
||||
skipoffset: {{ (int) Setting::get('jwplayer_advertising_skipoffset') ?: 5 }}, // Bỏ qua quảng cáo trong vòng 5 giây
|
||||
skipmessage: "Bỏ qua sau xx giây",
|
||||
skiptext: "Bỏ qua"
|
||||
}
|
||||
};
|
||||
fake_player.setup(objSetupFake);
|
||||
fake_player.on('complete', function(event) {
|
||||
$("#fake_jwplayer").remove();
|
||||
wrapper.innerHTML = `<iframe width="100%" height="100%" src="${link}" frameborder="0" scrolling="no"
|
||||
allowfullscreen="" allow='autoplay'></iframe>`
|
||||
fake_player.remove();
|
||||
});
|
||||
|
||||
fake_player.on('adSkipped', function(event) {
|
||||
$("#fake_jwplayer").remove();
|
||||
wrapper.innerHTML = `<iframe width="100%" height="100%" src="${link}" frameborder="0" scrolling="no"
|
||||
allowfullscreen="" allow='autoplay'></iframe>`
|
||||
fake_player.remove();
|
||||
});
|
||||
|
||||
fake_player.on('adComplete', function(event) {
|
||||
$("#fake_jwplayer").remove();
|
||||
wrapper.innerHTML = `<iframe width="100%" height="100%" src="${link}" frameborder="0" scrolling="no"
|
||||
allowfullscreen="" allow='autoplay'></iframe>`
|
||||
fake_player.remove();
|
||||
});
|
||||
} else {
|
||||
if (wrapper) {
|
||||
wrapper.innerHTML = `<iframe width="100%" height="100%" src="${link}" frameborder="0" scrolling="no"
|
||||
allowfullscreen="" allow='autoplay'></iframe>`
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == 'm3u8' || type == 'mp4') {
|
||||
wrapper.innerHTML = `<div id="jwplayer"></div>`;
|
||||
const player = jwplayer("jwplayer");
|
||||
const objSetup = {
|
||||
key: "{{ Setting::get('jwplayer_license') }}",
|
||||
aspectratio: "16:9",
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
image: "{{ $currentMovie->getPosterUrl() }}",
|
||||
file: link,
|
||||
playbackRateControls: true,
|
||||
playbackRates: [0.25, 0.75, 1, 1.25],
|
||||
sharing: {
|
||||
sites: [
|
||||
"reddit",
|
||||
"facebook",
|
||||
"twitter",
|
||||
"googleplus",
|
||||
"email",
|
||||
"linkedin",
|
||||
],
|
||||
},
|
||||
volume: 100,
|
||||
mute: false,
|
||||
autostart: true,
|
||||
logo: {
|
||||
file: "{{ Setting::get('jwplayer_logo_file') }}",
|
||||
link: "{{ Setting::get('jwplayer_logo_link') }}",
|
||||
position: "{{ Setting::get('jwplayer_logo_position') }}",
|
||||
},
|
||||
advertising: {
|
||||
tag: "{{ Setting::get('jwplayer_advertising_file') }}",
|
||||
client: "vast",
|
||||
vpaidmode: "insecure",
|
||||
skipoffset: {{ (int) Setting::get('jwplayer_advertising_skipoffset') ?: 5 }}, // Bỏ qua quảng cáo trong vòng 5 giây
|
||||
skipmessage: "Bỏ qua sau xx giây",
|
||||
skiptext: "Bỏ qua"
|
||||
}
|
||||
};
|
||||
|
||||
if (type == 'm3u8') {
|
||||
const segments_in_queue = 50;
|
||||
|
||||
var engine_config = {
|
||||
debug: !1,
|
||||
segments: {
|
||||
forwardSegmentCount: 50,
|
||||
},
|
||||
loader: {
|
||||
cachedSegmentExpiration: 864e5,
|
||||
cachedSegmentsCount: 1e3,
|
||||
requiredSegmentsPriority: segments_in_queue,
|
||||
httpDownloadMaxPriority: 9,
|
||||
httpDownloadProbability: 0.06,
|
||||
httpDownloadProbabilityInterval: 1e3,
|
||||
httpDownloadProbabilitySkipIfNoPeers: !0,
|
||||
p2pDownloadMaxPriority: 50,
|
||||
httpFailedSegmentTimeout: 500,
|
||||
simultaneousP2PDownloads: 20,
|
||||
simultaneousHttpDownloads: 2,
|
||||
// httpDownloadInitialTimeout: 12e4,
|
||||
// httpDownloadInitialTimeoutPerSegment: 17e3,
|
||||
httpDownloadInitialTimeout: 0,
|
||||
httpDownloadInitialTimeoutPerSegment: 17e3,
|
||||
httpUseRanges: !0,
|
||||
maxBufferLength: 300,
|
||||
// useP2P: false,
|
||||
},
|
||||
};
|
||||
if (Hls.isSupported() && p2pml.hlsjs.Engine.isSupported()) {
|
||||
var engine = new p2pml.hlsjs.Engine(engine_config);
|
||||
player.setup(objSetup);
|
||||
jwplayer_hls_provider.attach();
|
||||
p2pml.hlsjs.initJwPlayer(player, {
|
||||
liveSyncDurationCount: segments_in_queue, // To have at least 7 segments in queue
|
||||
maxBufferLength: 300,
|
||||
loader: engine.createLoaderClass(),
|
||||
});
|
||||
} else {
|
||||
player.setup(objSetup);
|
||||
}
|
||||
} else {
|
||||
player.setup(objSetup);
|
||||
}
|
||||
|
||||
|
||||
const resumeData = 'OPCMS-PlayerPosition-' + id;
|
||||
player.on('ready', function() {
|
||||
if (typeof(Storage) !== 'undefined') {
|
||||
if (localStorage[resumeData] == '' || localStorage[resumeData] == 'undefined') {
|
||||
console.log("No cookie for position found");
|
||||
var currentPosition = 0;
|
||||
} else {
|
||||
if (localStorage[resumeData] == "null") {
|
||||
localStorage[resumeData] = 0;
|
||||
} else {
|
||||
var currentPosition = localStorage[resumeData];
|
||||
}
|
||||
console.log("Position cookie found: " + localStorage[resumeData]);
|
||||
}
|
||||
player.once('play', function() {
|
||||
console.log('Checking position cookie!');
|
||||
console.log(Math.abs(player.getDuration() - currentPosition));
|
||||
if (currentPosition > 180 && Math.abs(player.getDuration() - currentPosition) >
|
||||
5) {
|
||||
player.seek(currentPosition);
|
||||
}
|
||||
});
|
||||
window.onunload = function() {
|
||||
localStorage[resumeData] = player.getPosition();
|
||||
}
|
||||
} else {
|
||||
console.log('Your browser is too old!');
|
||||
}
|
||||
});
|
||||
|
||||
player.on('complete', function() {
|
||||
if (typeof(Storage) !== 'undefined') {
|
||||
localStorage.removeItem(resumeData);
|
||||
} else {
|
||||
console.log('Your browser is too old!');
|
||||
}
|
||||
})
|
||||
|
||||
function formatSeconds(seconds) {
|
||||
var date = new Date(1970, 0, 1);
|
||||
date.setSeconds(seconds);
|
||||
return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
const episode = '{{ $episode->id }}';
|
||||
let playing = document.querySelector(`[data-id="${episode}"]`);
|
||||
if (playing) {
|
||||
playing.click();
|
||||
return;
|
||||
}
|
||||
|
||||
const servers = document.getElementsByClassName('streaming-server');
|
||||
if (servers[0]) {
|
||||
servers[0].click();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
$(".report").click(() => {
|
||||
fetch("{{ route('episodes.report', ['movie' => $currentMovie->slug, 'episode' => $episode->slug, 'id' => $episode->id]) }}", {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute(
|
||||
'content')
|
||||
},
|
||||
body: JSON.stringify({
|
||||
message: ''
|
||||
})
|
||||
});
|
||||
alert("Báo lỗi thành công!");
|
||||
$(".report").remove();
|
||||
})
|
||||
</script>
|
||||
|
||||
{!! setting('site_scripts_facebook_sdk') !!}
|
||||
|
||||
@endpush
|
||||
127
resources/views/themekiss/inc/catalog_filter.blade.php
Normal file
127
resources/views/themekiss/inc/catalog_filter.blade.php
Normal file
@@ -0,0 +1,127 @@
|
||||
<div class="quickfilter">
|
||||
<form action="/" class="filters " method="GET">
|
||||
<div class="filter dropdown">
|
||||
<button type="button" class="dropdown-toggle" data-toggle="dropdown"> Sắp xếp
|
||||
<span id="filtercount">Thời gian đăng</span> <i class="fa fa-angle-down"
|
||||
aria-hidden="true"></i></button>
|
||||
<ul class="dropdown-menu c4">
|
||||
<li>
|
||||
<input type="radio" id="sort-update" name="filter[sort]" value="update"
|
||||
@if (isset(request('filter')['sort']) && request('filter')['sort'] == 'update') checked @endif>
|
||||
<label for="sort-update">Thời gian cập nhật</label>
|
||||
</li>
|
||||
<li>
|
||||
<input type="radio" id="sort-create" name="filter[sort]" value="create"
|
||||
@if (isset(request('filter')['sort']) && request('filter')['sort'] == 'create') checked @endif>
|
||||
<label for="sort-create">Thời gian đăng</label>
|
||||
</li>
|
||||
<li>
|
||||
<input type="radio" id="sort-year" name="filter[sort]" value="year"
|
||||
@if (isset(request('filter')['sort']) && request('filter')['sort'] == 'year') checked @endif>
|
||||
<label for="sort-year">Năm sản xuất</label>
|
||||
</li>
|
||||
<li>
|
||||
<input type="radio" id="sort-view" name="filter[sort]" value="view"
|
||||
@if (isset(request('filter')['sort']) && request('filter')['sort'] == 'view') checked @endif>
|
||||
<label for="sort-view">Lượt xem</label>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="filter dropdown">
|
||||
<button type="button" class="dropdown-toggle" data-toggle="dropdown"> Định dạng
|
||||
<span id="filtercount">Toàn bộ</span> <i class="fa fa-angle-down"
|
||||
aria-hidden="true"></i></button>
|
||||
<ul class="dropdown-menu c4">
|
||||
<li>
|
||||
<input type="radio" id="type-all" name="filter[type]" value=""
|
||||
@if (!isset(request('filter')['type']) || request('filter')['type'] == '') checked @endif>
|
||||
<label for="type-all">Toàn bộ</label>
|
||||
</li>
|
||||
<li>
|
||||
<input type="radio" id="type-series" name="filter[type]" value="series"
|
||||
@if (isset(request('filter')['type']) && request('filter')['type'] == 'series') checked @endif>
|
||||
<label for="type-series">Phim bộ</label>
|
||||
</li>
|
||||
<li>
|
||||
<input type="radio" id="type-single" name="filter[type]" value="single"
|
||||
@if (isset(request('filter')['type']) && request('filter')['type'] == 'single') checked @endif>
|
||||
<label for="type-single">Phim lẻ</label>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="filter dropdown">
|
||||
<button type="button" class="dropdown-toggle" data-toggle="dropdown"> Thể loại
|
||||
<span id="filtercount">Toàn bộ</span> <i class="fa fa-angle-down"
|
||||
aria-hidden="true"></i></button>
|
||||
<ul class="dropdown-menu c4">
|
||||
<li>
|
||||
<input type="radio" id="category-all" name="filter[category]" value=""
|
||||
@if (!isset(request('filter')['category']) || request('filter')['category'] == '') checked @endif>
|
||||
<label for="category-all">Toàn bộ</label>
|
||||
</li>
|
||||
@foreach (\VsMov\Core\Models\Category::fromCache()->all() as $item)
|
||||
<li>
|
||||
<input type="radio" id="category-{{ $item->id }}" name="filter[category]"
|
||||
value="{{ $item->id }}" @if (
|
||||
(isset(request('filter')['category']) && request('filter')['category'] == $item->id) ||
|
||||
(isset($category) && $category->id == $item->id)) checked @endif>
|
||||
<label for="category-{{ $item->id }}">{{ $item->name }}</label>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="filter dropdown">
|
||||
<button type="button" class="dropdown-toggle" data-toggle="dropdown"> Quốc gia
|
||||
<span id="filtercount">Toàn bộ</span> <i class="fa fa-angle-down"
|
||||
aria-hidden="true"></i></button>
|
||||
<ul class="dropdown-menu c4">
|
||||
<li>
|
||||
<input type="radio" id="region-all" name="filter[region]" value=""
|
||||
@if (!isset(request('filter')['region']) || request('filter')['region'] == '') checked @endif>
|
||||
<label for="region-all">Toàn bộ</label>
|
||||
</li>
|
||||
@foreach (\VsMov\Core\Models\Region::fromCache()->all() as $item)
|
||||
<li>
|
||||
<input type="radio" id="region-{{ $item->id }}" name="filter[region]"
|
||||
value="{{ $item->id }}" @if (
|
||||
(isset(request('filter')['region']) && request('filter')['region'] == $item->id) ||
|
||||
(isset($region) && $region->id == $item->id)) checked @endif>
|
||||
<label for="region-{{ $item->id }}">{{ $item->name }}</label>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="filter dropdown">
|
||||
<button type="button" class="dropdown-toggle" data-toggle="dropdown"> Năm phát hành
|
||||
<span id="filtercount">Toàn bộ</span> <i class="fa fa-angle-down"
|
||||
aria-hidden="true"></i></button>
|
||||
<ul class="dropdown-menu c4">
|
||||
<li>
|
||||
<input type="radio" id="year-all" name="filter[year]" value=""
|
||||
@if (!isset(request('filter')['year']) || request('filter')['year'] == '') checked @endif>
|
||||
<label for="year-all">Toàn bộ</label>
|
||||
</li>
|
||||
|
||||
@foreach ($years as $year)
|
||||
<li>
|
||||
<input type="radio" id="year-{{ $year }}" name="filter[year]"
|
||||
value="{{ $year }}"
|
||||
@if (isset(request('filter')['year']) && request('filter')['year'] == $year) checked @endif>
|
||||
<label for="year-{{ $year }}">{{ $year }}</label>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="filter submit">
|
||||
<button type="submit" class="btn btn-custom-search"><i class="fa fa-search"
|
||||
aria-hidden="true"></i>
|
||||
Lọc Phim
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
10
resources/views/themekiss/inc/comment.blade.php
Normal file
10
resources/views/themekiss/inc/comment.blade.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<div class="bixbox">
|
||||
<div class="releases"><h3><span>Bình luận</span></h3></div>
|
||||
<div class="cmt commentx">
|
||||
<div class="box-comment" id="tabs-facebook" style="background: linear-gradient(to right, #ffff, #ffff);">
|
||||
<div class="fb-comments" data-href="{{$currentMovie->getUrl()}}" data-width="100%"
|
||||
data-numposts="10" data-order-by="reverse_time" data-colorscheme="light">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
69
resources/views/themekiss/inc/header.blade.php
Normal file
69
resources/views/themekiss/inc/header.blade.php
Normal file
@@ -0,0 +1,69 @@
|
||||
@php
|
||||
$logo = setting('site_logo', '');
|
||||
$brand = setting('site_brand', '');
|
||||
$title = isset($title) ? $title : setting('site_homepage_title', '');
|
||||
@endphp
|
||||
|
||||
<div class="th">
|
||||
<div class="centernav bound">
|
||||
<div class="shme"><i class="fa fa-bars" aria-hidden="true"></i></div>
|
||||
<header class="mainheader" role="banner" itemscope itemtype="http://schema.org/WPHeader">
|
||||
<div class="site-branding logox">
|
||||
<h1 class="logos">
|
||||
<a href="/" itemprop="url" title="{{ $title }}">
|
||||
@if ($logo)
|
||||
{!! $logo !!}
|
||||
@else
|
||||
{!! $brand !!}
|
||||
@endif
|
||||
</a>
|
||||
</h1>
|
||||
</div>
|
||||
</header>
|
||||
<div class="searchx">
|
||||
<form method="GET" action="/" id="form" itemprop="potentialAction" itemscope
|
||||
itemtype="http://schema.org/SearchAction">
|
||||
<meta itemprop="target" content="{{ request()->getSchemeAndHttpHost() }}/?search={query}" />
|
||||
<input id="s" name="search" itemprop="query-input" class="search-live" type="text"
|
||||
placeholder="Tìm kiếm phim..." value="{{ request('search') }}" />
|
||||
<button type="button" id="submit-search" onclick="$(this).parent().submit()">
|
||||
<i class="fa fa-search" aria-hidden="true"></i>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="thememode"><label class="switch"> <input type="checkbox"> <span class="slider round"></span>
|
||||
</label></div>
|
||||
</div>
|
||||
</div>
|
||||
<nav id="main-menu" class="mm">
|
||||
<div class="centernav">
|
||||
<div class="bound"><span itemscope="itemscope" itemtype="http://schema.org/SiteNavigationElement"
|
||||
role="navigation">
|
||||
<ul id="menu-menu" class="menu">
|
||||
@foreach ($menu as $item)
|
||||
@if (count($item['children']))
|
||||
<li id="menu-item-{{ $item['id'] }}"
|
||||
class="menu-item menu-item-type-custom menu-item-object-custom menu-item-{{ $item['id'] }}">
|
||||
<a href="{{$item['link']}}" itemprop="url"><span itemprop="name">{{ $item['name'] }}</span></a>
|
||||
<ul>
|
||||
@foreach ($item['children'] as $children)
|
||||
<li>
|
||||
<a href="{{$children['link']}}">{{$children['name']}}</a>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</li>
|
||||
@else
|
||||
<li id="menu-item-{{ $item['id'] }}"
|
||||
class="menu-item menu-item-type-custom menu-item-object-custom menu-item-{{ $item['id'] }}">
|
||||
<a href="{{$item['link']}}" itemprop="url"><span itemprop="name">{{ $item['name'] }}</span></a>
|
||||
</li>
|
||||
@endif
|
||||
@endforeach
|
||||
</ul>
|
||||
</span>
|
||||
{!! get_theme_option('button_navbar') !!}
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
107
resources/views/themekiss/inc/mainepisode.blade.php
Normal file
107
resources/views/themekiss/inc/mainepisode.blade.php
Normal file
@@ -0,0 +1,107 @@
|
||||
<div id="mainepisode">
|
||||
<div id="singlepisode">
|
||||
@foreach ($currentMovie->episodes->sortBy([['server', 'asc']])->groupBy('server') as $server => $data)
|
||||
<div class="headlist">
|
||||
<div class="thumb">
|
||||
<a href="{{$currentMovie->getUrl()}}">
|
||||
<img src="{{$currentMovie->getThumbUrl()}}"
|
||||
class="ts-post-image wp-post-image attachment-medium size-medium" loading="lazy"
|
||||
title="{{$currentMovie->name}}" alt="{{$currentMovie->name}}" width="203" height="300">
|
||||
</a>
|
||||
</div>
|
||||
<div class="det">
|
||||
<h3>
|
||||
<a href="{{$currentMovie->getUrl()}}">{{$currentMovie->name}}</a>
|
||||
</h3>
|
||||
<span>
|
||||
@if ($episode->server == $server) <i>Đang xem tập {{ $episode->name }}</i> - @endif {{$server}}</span>
|
||||
</div>
|
||||
<div class="search-ep">
|
||||
<input type="text" class="search-ep-text" id="search-ep-text-{{$loop->index}}" value="" placeholder="Tìm tập nhanh...">
|
||||
<button type="button" class="search-ep-eraser" id="search-ep-eraser-{{$loop->index}}" style="display: none; top: 4px">
|
||||
<i class="fa fa-times" aria-hidden="true"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="episodelist" id="episodelist-{{ $loop->index }}">
|
||||
<ul>
|
||||
<li id="search-ep-no-result-{{ $loop->index }}" style="display:none; text-align: center; padding: 10px 5px">Không thấy tập này</li>
|
||||
@foreach ($data->sortByDesc('name', SORT_NATURAL)->groupBy('name') as $name => $item)
|
||||
<li data-server="{{$loop->parent->index}}" data-name="{{$name}}" data-id="{{$item->sortByDesc('type')->first()->id}}" @if ($item->contains($episode)) class="selected" selected="selected" @endif>
|
||||
<a href="{{ $item->sortByDesc('type')->first()->getUrl() }}" itemprop="url"
|
||||
title="{{$currentMovie->name}} Tập {{$name}}">
|
||||
<div class="thumbnel">
|
||||
@php
|
||||
$ep_link = $item->sortByDesc('type')->first()->link;
|
||||
$ep_img = str_replace('index.m3u8', '1.jpg', $ep_link, $check_replace);
|
||||
if ($check_replace == 0) {
|
||||
$ep_img = $currentMovie->getPosterUrl();
|
||||
}
|
||||
@endphp
|
||||
<img src="{{$ep_img}}"
|
||||
class="ts-post-image wp-post-image attachment-post-thumbnail size-post-thumbnail"
|
||||
loading="lazy" itemprop="image" title="{{$currentMovie->name}} Tập {{$name}}"
|
||||
alt="{{$currentMovie->name}} Tập {{$name}}" width="900" height="1332">
|
||||
<div class="nowplay">
|
||||
<i class="far fa-play-circle"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="playinfo">
|
||||
<h4>{{ $currentMovie->name }} Tập {{ $name }}</h4>
|
||||
<span class="epname">Tập {{ $name }}</span>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<script>
|
||||
var tsMediaSelectedId = {{$episode->id}};
|
||||
var tsMediaEpNow = "{{$episode->name}}";
|
||||
tsMedia(tsmmedia);
|
||||
tsMediaPickList();
|
||||
</script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$(".search-ep-text").on("keyup", function () {
|
||||
let keyword = this.value;
|
||||
let server_id = this.getAttribute("id").split('search-ep-text-')[1];
|
||||
if(keyword && keyword != '') {
|
||||
$(`#search-ep-eraser-${server_id}`).show();
|
||||
} else {
|
||||
$(`#search-ep-eraser-${server_id}`).hide();
|
||||
}
|
||||
let result_count = 0;
|
||||
$(`#episodelist-${server_id} ul li`).each(function (idx, item) {
|
||||
let item_name = item.getAttribute('data-name');
|
||||
let item_server = item.getAttribute('data-server');
|
||||
if (item_server == server_id) {
|
||||
if(item_name.toLowerCase().indexOf(keyword.toLowerCase()) !== -1) {
|
||||
$(item).show();
|
||||
result_count++;
|
||||
} else {
|
||||
$(item).hide();
|
||||
}
|
||||
}
|
||||
})
|
||||
if(result_count == 0) $(`#search-ep-no-result-${server_id}`).show();
|
||||
else $(`#search-ep-no-result-${server_id}`).hide();
|
||||
})
|
||||
$(".search-ep-eraser").on("click", function () {
|
||||
let server_id = this.getAttribute("id").split('search-ep-eraser-')[1];
|
||||
$(`#search-ep-eraser-${server_id}`).hide();
|
||||
$(`#search-ep-text-${server_id}`).val("");
|
||||
$(`#search-ep-no-result-${server_id}`).hide();
|
||||
$(`#episodelist-${server_id} ul li`).each(function (idx, item) {
|
||||
let item_server = item.getAttribute('data-server');
|
||||
if (item_server == server_id) {
|
||||
$(item).show();
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
42
resources/views/themekiss/inc/movie_related.blade.php
Normal file
42
resources/views/themekiss/inc/movie_related.blade.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<div class="bixbox">
|
||||
<div class="releases"><h3>Phim cùng thể loại</h3></div>
|
||||
<div class="series-gen">
|
||||
<div class="listupd">
|
||||
<div id="series-390" class="tab-pane active">
|
||||
@foreach ($movie_related as $movie)
|
||||
<article class="bs" itemscope="itemscope" itemtype="http://schema.org/CreativeWork">
|
||||
<div class="bsx"><a href="{{ $movie->getUrl() }}" itemprop="url"
|
||||
title="{{ $movie->name }} ({{ $movie->origin_name }}) [{{ $movie->publish_year }}]"
|
||||
class="tip" rel="{{ $movie->id }}">
|
||||
<div class="limit">
|
||||
@if ($movie->is_recommended)
|
||||
<div class="hotbadge"><i class="fas fa-fire-alt"></i></div>
|
||||
@endif
|
||||
@if ($movie->type == 'series' && $movie->status == 'completed')
|
||||
<div class="status Completed">Trọn bộ</div>
|
||||
@endif
|
||||
<div class="typez {{ $movie->type == 'series' ? 'Drama' : 'Movie' }}">
|
||||
{{ $movie->type == 'series' ? 'Phim bộ' : 'Phim lẻ' }}</div>
|
||||
<div class="ply"><i class="far fa-play-circle"></i></div>
|
||||
<div class="bt"><span class="epx">{{ $movie->episode_current }}</span> <span
|
||||
class="sb Soft Sub">{{ $movie->language }}</span></div>
|
||||
<img src="{{ $movie->getThumbUrl() }}"
|
||||
class="ts-post-image wp-post-image attachment-medium size-medium" loading="lazy"
|
||||
itemprop="image"
|
||||
title="{{ $movie->name }} ({{ $movie->origin_name }}) [{{ $movie->publish_year }}]"
|
||||
alt="{{ $movie->name }} ({{ $movie->origin_name }}) [{{ $movie->publish_year }}]"
|
||||
width="240" height="300" />
|
||||
</div>
|
||||
<div class="ttt">
|
||||
<div class="tt"> {{ $movie->name }}<h2 itemprop="headline">
|
||||
{{ $movie->origin_name }} {{ $movie->episode_current }}</h2>
|
||||
</div>
|
||||
<div class="timeago"> {{ $movie->origin_name }}</div>
|
||||
</div>
|
||||
</a></div>
|
||||
</article>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
36
resources/views/themekiss/inc/pagination.blade.php
Normal file
36
resources/views/themekiss/inc/pagination.blade.php
Normal file
@@ -0,0 +1,36 @@
|
||||
@if ($paginator->hasPages())
|
||||
<div class="pagination">
|
||||
{{-- Previous Page Link --}}
|
||||
@if ($paginator->onFirstPage())
|
||||
@else
|
||||
<a class="prev page-numbers" href="{{ $paginator->previousPageUrl() }}" rel="prev"
|
||||
aria-label="@lang('pagination.previous')">« Previous</a>
|
||||
@endif
|
||||
|
||||
{{-- Pagination Elements --}}
|
||||
@foreach ($elements as $element)
|
||||
{{-- "Three Dots" Separator --}}
|
||||
@if (is_string($element))
|
||||
<li class="disabled" aria-disabled="true"><span class="">{{ $element }}</span></li>
|
||||
@endif
|
||||
|
||||
{{-- Array Of Links --}}
|
||||
@if (is_array($element))
|
||||
@foreach ($element as $page => $url)
|
||||
@if ($page == $paginator->currentPage())
|
||||
<span aria-current="page" class="page-numbers current">{{ $page }}</span>
|
||||
@else
|
||||
<a class="page-numbers" href="{{ $url }}">{{ $page }}</a>
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
{{-- Next Page Link --}}
|
||||
@if ($paginator->hasMorePages())
|
||||
<a class="next page-numbers" href="{{ $paginator->nextPageUrl() }}" rel="next"
|
||||
aria-label="@lang('pagination.next')">Next »</a>
|
||||
@else
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
29
resources/views/themekiss/inc/section_1.blade.php
Normal file
29
resources/views/themekiss/inc/section_1.blade.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<div class="bixbox">
|
||||
<div class="releases hothome">
|
||||
<h3>{{ $item['label'] }}</h3>
|
||||
</div>
|
||||
<div class="listupd flex">
|
||||
<div class="excstf">
|
||||
@foreach ($item['data'] as $movie)
|
||||
<article class="stylefor" itemscope="itemscope" itemtype="http://schema.org/CreativeWork">
|
||||
<div class="bsx"><a href="{{ $movie->getUrl() }}" itemprop="url" title="{{ $movie->name }}"
|
||||
class="tip" rel="{{ $movie->id }}">
|
||||
<div class="limit">
|
||||
<div class="typez">{{ $movie->quality }}</div>
|
||||
<img src="{{ $movie->getThumbUrl() }}"
|
||||
class="ts-post-image wp-post-image attachment-medium size-medium" loading="lazy"
|
||||
itemprop="image" title="{{ $movie->name }}" alt="{{ $movie->name }}"
|
||||
width="203" height="300" />
|
||||
<div class="tt">
|
||||
<h2 itemprop="headline">{{ $movie->name }}</h2> <span>{{ $movie->episode_current }}
|
||||
<i>{{ $movie->language }}</i></span>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
</article>
|
||||
@endforeach
|
||||
</div>
|
||||
<div class="hpage"><a href="{{ $item['link'] }}" class="r">Xem thêm <i class="fa fa-chevron-right"
|
||||
aria-hidden="true"></i></a></div>
|
||||
</div>
|
||||
</div>
|
||||
41
resources/views/themekiss/inc/section_2.blade.php
Normal file
41
resources/views/themekiss/inc/section_2.blade.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<div class="bixbox">
|
||||
<div class="releases latesthome">
|
||||
<h3>{{ $item['label'] }}</h3><a class="vl" href="{{ $item['link'] }}">Xem thêm</a>
|
||||
</div>
|
||||
<div class="listupd normal">
|
||||
<div class="excstf">
|
||||
@foreach ($item['data'] as $movie)
|
||||
<article class="bs" itemscope="itemscope" itemtype="http://schema.org/CreativeWork">
|
||||
<div class="bsx"><a href="{{$movie->getUrl()}}" itemprop="url"
|
||||
title="{{ $movie->name }} ({{ $movie->origin_name }}) [{{ $movie->publish_year }}]"
|
||||
class="tip" rel="37246">
|
||||
<div class="limit">
|
||||
@if ($movie->is_recommended)
|
||||
<div class="hotbadge"><i class="fas fa-fire-alt"></i></div>
|
||||
@endif
|
||||
@if ($movie->type == 'series' && $movie->status == 'completed')
|
||||
<div class="status Completed">Trọn bộ</div>
|
||||
@endif
|
||||
<div class="typez {{ $movie->type == 'series' ? 'Drama' : 'Movie' }}">
|
||||
{{ $movie->type == 'series' ? 'Phim bộ' : 'Phim lẻ' }}</div>
|
||||
<div class="ply"><i class="far fa-play-circle"></i></div>
|
||||
<div class="bt"><span class="epx">{{ $movie->episode_current }}</span> <span
|
||||
class="sb Soft Sub">{{ $movie->language }}</span></div>
|
||||
<img src="{{$movie->getThumbUrl()}}"
|
||||
class="ts-post-image wp-post-image attachment-medium size-medium" loading="lazy"
|
||||
itemprop="image"
|
||||
title="{{ $movie->name }} ({{ $movie->origin_name }}) [{{ $movie->publish_year }}]"
|
||||
alt="{{ $movie->name }} ({{ $movie->origin_name }}) [{{ $movie->publish_year }}]"
|
||||
width="240" height="300" />
|
||||
</div>
|
||||
<div class="ttt">
|
||||
<div class="tt"> {{$movie->name}}<h2 itemprop="headline">{{$movie->origin_name}} {{ $movie->episode_current }}</h2>
|
||||
</div>
|
||||
<div class="timeago"> {{ $movie->origin_name }}</div>
|
||||
</div>
|
||||
</a></div>
|
||||
</article>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
6
resources/views/themekiss/inc/sidebar.blade.php
Normal file
6
resources/views/themekiss/inc/sidebar.blade.php
Normal file
@@ -0,0 +1,6 @@
|
||||
<div id="sidebar">
|
||||
@yield('mainepisode')
|
||||
@foreach ($tops as $top)
|
||||
@include('themes::themekiss.inc.' . $top['template'])
|
||||
@endforeach
|
||||
</div>
|
||||
72
resources/views/themekiss/inc/slider_recommended.blade.php
Normal file
72
resources/views/themekiss/inc/slider_recommended.blade.php
Normal file
@@ -0,0 +1,72 @@
|
||||
<div class="slidtop">
|
||||
<div class="loop owl-carousel full">
|
||||
@foreach ($recommendations as $movie)
|
||||
<div class="slide-item full">
|
||||
<div class="slide-bg"><img src="{{ $movie->getPosterUrl() }}"
|
||||
class="ts-post-image wp-post-image attachment-medium size-medium" loading="lazy" itemprop="image"
|
||||
title="{{ $movie->name }}" alt="{{ $movie->name }}" width="212" height="300" /></div>
|
||||
<div class="slide-shadow"></div>
|
||||
<div class="slide-content">
|
||||
<div class="poster" style="position:relative"><a href="{{ $movie->getUrl() }}"> <img
|
||||
src="{{ $movie->getThumbUrl() }}"
|
||||
class="ts-post-image wp-post-image attachment-medium size-medium" loading="lazy"
|
||||
itemprop="image" title="{{ $movie->name }}" alt="{{ $movie->name }}" width="212"
|
||||
height="300" /> </a></div>
|
||||
<div class="info-left">
|
||||
<div class="title">
|
||||
<div class="rating">
|
||||
<div class="vote">
|
||||
<div class="site-vote"><span class="fa fa-star"
|
||||
aria-hidden="true"><span>{{$movie->getRatingStar()}}</span></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span class="ellipsis"><a href="{{ $movie->getUrl() }}">{{ $movie->name }}</a></span>
|
||||
<span class="release-year ellipsis">{{ $movie->origin_name }}
|
||||
({{ $movie->publish_year }})</span>
|
||||
</div>
|
||||
<div class="extras">
|
||||
<div class="extra-category">
|
||||
{!! $movie->categories->map(function ($category) {
|
||||
return '<a href="' .
|
||||
$category->getUrl() .
|
||||
'" tite="Phim ' .
|
||||
$category->name .
|
||||
' rel="tag"">' .
|
||||
$category->name .
|
||||
'</a>';
|
||||
})->implode(', ') !!}
|
||||
</div>
|
||||
</div>
|
||||
<div class="excerpt"><span class="title">Nội dung</span>
|
||||
<p class="story">
|
||||
<p>
|
||||
{{ strip_tags($movie->content) }}
|
||||
</p>
|
||||
</p>
|
||||
</div>
|
||||
<div class="cast"><span class="director"><strong>Tình trạng:</strong>
|
||||
{{ $movie->episode_current }}</span>
|
||||
<span class="actor"><strong>Định dạng:</strong>
|
||||
{{ $movie->type == 'single' ? 'Phim lẻ' : 'Phim bộ' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<div class="trending">
|
||||
<div class="tdb"><a href="{{ $trending_this_week->getUrl() }}">
|
||||
<div class="crown"></div>
|
||||
<div class="textbg blxc">
|
||||
<div class="bghover"><span class="numa"><b>Trending</b> This Week</span>
|
||||
<span class="numb"><b>{{ $trending_this_week->name }}</b></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="imgxa">
|
||||
<div class="imgxb" style="background-image: url('{{ $trending_this_week->getThumbUrl() }}');">
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
</div>
|
||||
</div>
|
||||
19
resources/views/themekiss/inc/top_text.blade.php
Normal file
19
resources/views/themekiss/inc/top_text.blade.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<div class="section">
|
||||
<div class="releases">
|
||||
<h3>{{ $top['label'] }}</h3>
|
||||
</div>
|
||||
<span class="ts-ajax-cache">
|
||||
<div class='ongoingseries'>
|
||||
<ul>
|
||||
@foreach ($top['data'] as $movie)
|
||||
<li>
|
||||
<a href="{{ $movie->getUrl() }}" title="{{ $movie->name }} {{ $movie->publish_year }}">
|
||||
<span class="l"><i class="fas fa-angle-right"></i> {{ $movie->name }}</span>
|
||||
<span class="r"> {{ $movie->publish_year }} </span>
|
||||
</a>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
45
resources/views/themekiss/inc/top_thumb_1.blade.php
Normal file
45
resources/views/themekiss/inc/top_thumb_1.blade.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<div class="section">
|
||||
<div class="releases">
|
||||
<h3>{{ $top['label'] }}</h3>
|
||||
</div>
|
||||
<div id="wpop-items">
|
||||
<div class='serieslist pop wpop wpop-weekly'>
|
||||
<ul>
|
||||
@foreach ($top['data'] as $movie)
|
||||
<li>
|
||||
<div class="ctr">{{ $loop->index + 1 }}</div>
|
||||
<div class="imgseries"><a class="series" href="{{ $movie->getUrl() }}" rel="68"> <img
|
||||
src="{{ $movie->getThumbUrl() }}"
|
||||
class="ts-post-image wp-post-image attachment-medium size-medium" loading="lazy"
|
||||
width="214" height="300" /> </a></div>
|
||||
<div class="leftseries">
|
||||
<h4><a class="series" href="{{ $movie->getUrl() }}" rel="68">{{ $movie->name }}</a>
|
||||
</h4>
|
||||
<span><b>Thể loại</b>:
|
||||
{!! $movie->categories->map(function ($category) {
|
||||
return '<a href="' .
|
||||
$category->getUrl() .
|
||||
'" tite="Phim ' .
|
||||
$category->name .
|
||||
' rel="tag"">' .
|
||||
$category->name .
|
||||
'</a>';
|
||||
})->implode(', ') !!}
|
||||
</span>
|
||||
<div class="rt">
|
||||
<div class="rating">
|
||||
<div class="rating-prc">
|
||||
<div class="rtp">
|
||||
<div class="rtb"><span style="width:{{($movie->getRatingStar())*10}}%"></span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="numscore">{{$movie->getRatingStar()}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
34
resources/views/themekiss/inc/top_thumb_2.blade.php
Normal file
34
resources/views/themekiss/inc/top_thumb_2.blade.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<div class="section">
|
||||
<div class="releases">
|
||||
<h3><span>{{ $top['label'] }}</span></h3>
|
||||
</div>
|
||||
<div class='serieslist'>
|
||||
<ul>
|
||||
@foreach ($top['data'] as $movie)
|
||||
<li>
|
||||
<div class="imgseries"><a class="series" href="{{ $movie->getUrl() }}" rel=""> <img
|
||||
src="{{ $movie->getThumbUrl() }}"
|
||||
class="ts-post-image wp-post-image attachment-medium size-medium" loading="lazy"
|
||||
itemprop="image" title="{{$movie->name}} ({{$movie->publish_year}})" alt="{{$movie->name}} ({{$movie->publish_year}})"
|
||||
width="200" height="300" /> </a></div>
|
||||
<div class="leftseries">
|
||||
<h4><a class="series" href="{{ $movie->getUrl() }}" rel="37993"> {{$movie->name}} ({{$movie->publish_year}}) </a>
|
||||
</h4>
|
||||
<span>{{$movie->origin_name}}</span>
|
||||
<span><b>Thể loại</b>:
|
||||
{!! $movie->categories->map(function ($category) {
|
||||
return '<a href="' .
|
||||
$category->getUrl() .
|
||||
'" tite="Phim ' .
|
||||
$category->name .
|
||||
' rel="tag"">' .
|
||||
$category->name .
|
||||
'</a>';
|
||||
})->implode(', ') !!}
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
80
resources/views/themekiss/index.blade.php
Normal file
80
resources/views/themekiss/index.blade.php
Normal file
@@ -0,0 +1,80 @@
|
||||
@extends('themes::themekiss.layout')
|
||||
|
||||
@php
|
||||
use VsMov\Core\Models\Movie;
|
||||
|
||||
$recommendations = Cache::remember('site.movies.recommendations', setting('site_cache_ttl', 5 * 60), function () {
|
||||
return Movie::where('is_recommended', true)
|
||||
->limit(get_theme_option('recommendations_limit', 10))
|
||||
->orderBy('updated_at', 'desc')
|
||||
->get();
|
||||
});
|
||||
|
||||
$data = Cache::remember('site.movies.latest', setting('site_cache_ttl', 5 * 60), function () {
|
||||
$lists = preg_split('/[\n\r]+/', get_theme_option('latest'));
|
||||
$data = [];
|
||||
foreach ($lists as $list) {
|
||||
if (trim($list)) {
|
||||
$list = explode('|', $list);
|
||||
[$label, $relation, $field, $val, $limit, $link, $template] = array_merge($list, ['Phim mới cập nhật', '', 'type', 'series', 8, '/', 'section_1']);
|
||||
try {
|
||||
$data[] = [
|
||||
'label' => $label,
|
||||
'template' => $template,
|
||||
'data' => Movie::when($relation, function ($query) use ($relation, $field, $val) {
|
||||
$query->whereHas($relation, function ($rel) use ($field, $val) {
|
||||
$rel->where($field, $val);
|
||||
});
|
||||
})
|
||||
->when(!$relation, function ($query) use ($field, $val) {
|
||||
$query->where($field, $val);
|
||||
})
|
||||
->limit($limit)
|
||||
->orderBy('updated_at', 'desc')
|
||||
->get(),
|
||||
'link' => $link ?: '#',
|
||||
];
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return $data;
|
||||
});
|
||||
|
||||
@endphp
|
||||
|
||||
@section('content')
|
||||
@if (count($recommendations))
|
||||
@include('themes::themekiss.inc.slider_recommended')
|
||||
@endif
|
||||
@foreach ($data as $item)
|
||||
@include('themes::themekiss.inc.' . $item['template'])
|
||||
@endforeach
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script type='text/javascript' src='{{ asset('/themes/kiss/js/owl.carousel.min.js') }}' id='owl-carousel-js'></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('.loop').owlCarousel({
|
||||
center: true,
|
||||
loop: true,
|
||||
nav: true,
|
||||
//animateOut: 'fadeOut',
|
||||
navText: ["<span class='prev icon-angle-left'></span>",
|
||||
"<span class='next icon-angle-right'></span>"
|
||||
],
|
||||
margin: 0,
|
||||
autoplay: true,
|
||||
autoplayTimeout: 5000,
|
||||
autoplayHoverPause: true,
|
||||
responsive: {
|
||||
0: {
|
||||
items: 1,
|
||||
stagePadding: 0,
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
77
resources/views/themekiss/layout.blade.php
Normal file
77
resources/views/themekiss/layout.blade.php
Normal file
@@ -0,0 +1,77 @@
|
||||
@extends('themes::layout')
|
||||
|
||||
@php
|
||||
$menu = \VsMov\Core\Models\Menu::getTree();
|
||||
$tops = Cache::remember('site.movies.tops', setting('site_cache_ttl', 5 * 60), function () {
|
||||
$lists = preg_split('/[\n\r]+/', get_theme_option('hotest'));
|
||||
$data = [];
|
||||
foreach ($lists as $list) {
|
||||
if (trim($list)) {
|
||||
$list = explode('|', $list);
|
||||
[$label, $relation, $field, $val, $sortKey, $alg, $limit, $template] = array_merge($list, ['Phim hot', '', 'type', 'series', 'view_week', 'desc', 4, 'top_text']);
|
||||
try {
|
||||
$data[] = [
|
||||
'label' => $label,
|
||||
'template' => $template,
|
||||
'data' => \VsMov\Core\Models\Movie::when($relation, function ($query) use ($relation, $field, $val) {
|
||||
$query->whereHas($relation, function ($rel) use ($field, $val) {
|
||||
$rel->where($field, $val);
|
||||
});
|
||||
})
|
||||
->when(!$relation, function ($query) use ($field, $val) {
|
||||
$query->where($field, $val);
|
||||
})
|
||||
->orderBy($sortKey, $alg)
|
||||
->limit($limit)
|
||||
->get(),
|
||||
];
|
||||
} catch (\Exception $e) {
|
||||
# code
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
});
|
||||
@endphp
|
||||
|
||||
@push('header')
|
||||
<meta name="theme-color" content="#e7b53a">
|
||||
<script type='text/javascript' src='{{ asset('/themes/kiss/js/jquery.min.js') }}' id='jquery-js'></script>
|
||||
<link rel="stylesheet" href="{{ asset('/themes/kiss/css/style.css') }}">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Fira+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"
|
||||
rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" />
|
||||
@endpush
|
||||
|
||||
@section('body')
|
||||
<div id='shadow'></div>
|
||||
<div class="mainholder">
|
||||
@include('themes::themekiss.inc.header')
|
||||
@if (get_theme_option('ads_header'))
|
||||
{!! get_theme_option('ads_header') !!}
|
||||
@endif
|
||||
<div id="content">
|
||||
<div class="wrapper">
|
||||
<div class="pd-expand"></div>
|
||||
<div class="postbody">
|
||||
@yield('content')
|
||||
</div>
|
||||
@include('themes::themekiss.inc.sidebar')
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</div>
|
||||
{!! get_theme_option('footer') !!}
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
@endpush
|
||||
|
||||
@section('footer')
|
||||
{!! get_theme_option('ads_catfish') !!}
|
||||
<script type='text/javascript' src='{{ asset('/themes/kiss/js/app_2.js') }}' id='qtip-js'></script>
|
||||
{!! setting('site_scripts_google_analytics') !!}
|
||||
@endsection
|
||||
257
resources/views/themekiss/single.blade.php
Normal file
257
resources/views/themekiss/single.blade.php
Normal file
@@ -0,0 +1,257 @@
|
||||
@extends('themes::themekiss.layout')
|
||||
|
||||
@php
|
||||
$watchUrl = '#';
|
||||
$watchUrlLast = '#';
|
||||
$firstWatchName = '';
|
||||
$lastWatchName = '';
|
||||
|
||||
if (!$currentMovie->is_copyright && count($currentMovie->episodes) && $currentMovie->episodes[0]['link'] != '') {
|
||||
$firstWatch = $currentMovie->episodes
|
||||
->sortBy([['server', 'asc']])
|
||||
->groupBy('server')
|
||||
->first()
|
||||
->sortByDesc('name', SORT_NATURAL)
|
||||
->groupBy('name')
|
||||
->last()
|
||||
->sortByDesc('type')
|
||||
->first();
|
||||
$firstWatchName = $firstWatch->name;
|
||||
$watchUrl = $firstWatch->getUrl();
|
||||
|
||||
$lastWatch = $currentMovie->episodes
|
||||
->sortBy([['server', 'asc']])
|
||||
->groupBy('server')
|
||||
->last()
|
||||
->sortByDesc('name', SORT_NATURAL)
|
||||
->groupBy('name')
|
||||
->first()
|
||||
->sortByDesc('type')
|
||||
->last();
|
||||
$lastWatchName = $lastWatch->name;
|
||||
$watchUrlLast = $lastWatch->getUrl();
|
||||
}
|
||||
|
||||
@endphp
|
||||
|
||||
@push('header')
|
||||
<link rel="stylesheet" href="{{ asset('/themes/kiss/css/jquery.fancybox.min.css') }}">
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<article id="post-{{ $currentMovie->id }}" class="post-{{ $currentMovie->id }} hentry" itemscope="itemscope"
|
||||
itemtype="http://schema.org/CreativeWorkSeries">
|
||||
<div class="ts-breadcrumb bixbox">
|
||||
<ol itemscope="" itemtype="http://schema.org/BreadcrumbList">
|
||||
<li itemprop="itemListElement" itemscope="" itemtype="http://schema.org/ListItem"><a itemprop="item"
|
||||
href="/"><span itemprop="name">Xem phim</span></a>
|
||||
<meta itemprop="position" content="1">
|
||||
</li>
|
||||
›
|
||||
<li itemprop="itemListElement" itemscope="" itemtype="http://schema.org/ListItem"><a itemprop="item"
|
||||
href="{{ $currentMovie->getUrl() }}"><span itemprop="name">{{ $currentMovie->name }}</span></a>
|
||||
<meta itemprop="position" content="2">
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div class="bixbox animefull">
|
||||
<div class="bigcover">
|
||||
<div class="ime"><a href="{{ $watchUrl }}" class="lnk"></a> <img
|
||||
src="{{ $currentMovie->getPosterUrl() }}" alt="{{ $currentMovie->name }}" />
|
||||
</div>
|
||||
@if ($watchUrl != '#')
|
||||
<a href="{{ $watchUrl }}" class="gp"><i class="far fa-play-circle" aria-hidden="true"></i></a>
|
||||
@endif
|
||||
</div>
|
||||
<div class="bigcontent">
|
||||
<div class="thumbook">
|
||||
<div class="thumb" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
|
||||
<img src="{{ $currentMovie->getThumbUrl() }}"
|
||||
class="ts-post-image wp-post-image attachment-post-thumbnail size-post-thumbnail" loading="lazy"
|
||||
itemprop="image" title="{{ $currentMovie->name }}" alt="{{ $currentMovie->name }}"
|
||||
width="900" height="1594" />
|
||||
</div>
|
||||
<div class="rt">
|
||||
<div class="rating"><strong>Rating
|
||||
{{ number_format($currentMovie->ratting_star, 1) == 0.0 ? '8.0' : number_format($currentMovie->ratting_star, 1) }}</strong>
|
||||
<div class="rating-prc" itemscope="itemscope" itemprop="aggregateRating"
|
||||
itemtype="//schema.org/AggregateRating">
|
||||
<meta itemprop="ratingValue"
|
||||
content="{{ number_format($currentMovie->ratting_star, 1) == 0.0 ? '8.0' : number_format($currentMovie->ratting_star, 1) }}">
|
||||
<meta itemprop="worstRating" content="1">
|
||||
<meta itemprop="bestRating" content="10">
|
||||
<meta itemprop="ratingCount"
|
||||
content="{{ $currentMovie->ratting_count == 0 ? 1 : $currentMovie->ratting_count }}">
|
||||
<div class="rtp">
|
||||
<div class="rtb"><span
|
||||
style="width:{{ (number_format($currentMovie->ratting_star, 1) == 0.0 ? '8.0' : number_format($currentMovie->ratting_star, 1)) * 10 }}%"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if ($currentMovie->trailer_url)
|
||||
<a data-fancybox href="{{ $currentMovie->trailer_url }}" class="trailerbutton"> <i
|
||||
class="fab fa-youtube"></i> Trailer </a>
|
||||
@endif
|
||||
@if ($watchUrl != '#')
|
||||
<a style="display: block" href="{{ $watchUrl }}" class="bookmark"><i
|
||||
class="far fa-play-circle" aria-hidden="true"></i> Xem Phim</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="infox">
|
||||
<h1 class="entry-title" itemprop="name">{{ $currentMovie->name }}</h1>
|
||||
<div class="ninfo">
|
||||
<span class="alter">Tên khác: {{ $currentMovie->origin_name }}</span>
|
||||
<div class="info-content">
|
||||
<div class="spe">
|
||||
<span>
|
||||
<b>Status:</b> {{ $currentMovie->status }} </span>
|
||||
<span class="split">
|
||||
<b>Năm phát hành:</b> {{ $currentMovie->publish_year }} </span>
|
||||
<span>
|
||||
<b>Thời lượng:</b> {{ $currentMovie->episode_time }} </span>
|
||||
<span>
|
||||
<b>Quốc gia:</b>
|
||||
{!! $currentMovie->regions->map(function ($region) {
|
||||
return '<a href="' .
|
||||
$region->getUrl() .
|
||||
'" tite="Phim ' .
|
||||
$region->name .
|
||||
' rel="tag"">' .
|
||||
$region->name .
|
||||
'</a>';
|
||||
})->implode(', ') !!}
|
||||
</span>
|
||||
<span>
|
||||
<b>Định dạng:</b> {{ $currentMovie->type == 'series' ? 'Phim bộ' : 'Phim lẻ' }} </span>
|
||||
<span>
|
||||
<b>Số tập:</b> {{ $currentMovie->episode_total }} </span>
|
||||
<span class="split">
|
||||
<b>Đạo diễn:</b>
|
||||
{!! $currentMovie->directors->map(function ($director) {
|
||||
return '<a href="' .
|
||||
$director->getUrl() .
|
||||
'" tite="Đạo diễn ' .
|
||||
$director->name .
|
||||
' rel="tag"">' .
|
||||
$director->name .
|
||||
'</a>';
|
||||
})->implode(', ') !!}
|
||||
</span>
|
||||
<span class="split">
|
||||
<b>Diễn viên:</b>
|
||||
{!! $currentMovie->actors->map(function ($actor) {
|
||||
return '<a href="' .
|
||||
$actor->getUrl() .
|
||||
'" tite="diễn viên ' .
|
||||
$actor->name .
|
||||
' rel="tag"">' .
|
||||
$actor->name .
|
||||
'</a>';
|
||||
})->implode(', ') !!}
|
||||
</span>
|
||||
<span class="split">
|
||||
<b>Chất lượng:</b>
|
||||
{{ $currentMovie->quality }} {{ $currentMovie->language }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="genxed">
|
||||
{!! $currentMovie->categories->map(function ($category) {
|
||||
return '<a href="' .
|
||||
$category->getUrl() .
|
||||
'" tite="Phim ' .
|
||||
$category->name .
|
||||
' rel="tag"">' .
|
||||
$category->name .
|
||||
'</a>';
|
||||
})->implode('') !!}
|
||||
</div>
|
||||
@if ($currentMovie->notify && $currentMovie->notify != '')
|
||||
<div class="desc"><strong>Thông báo: </strong>{{ strip_tags($currentMovie->notify) }}
|
||||
</div>
|
||||
@endif
|
||||
@if ($currentMovie->showtimes && $currentMovie->showtimes != '')
|
||||
<div class="desc"><strong>Lịch chiếu: </strong>{{ strip_tags($currentMovie->showtimes) }}
|
||||
</div>
|
||||
@endif
|
||||
<div class="desc">
|
||||
Xem phim {{ $currentMovie->name }} có phụ đề tiếng việt trên {{ request()->getHost() }}.
|
||||
Bạn cũng có thể tải xuống {{ $currentMovie->name }} vietsub miễn phí, đừng quên xem phát
|
||||
trực tuyến với nhiều chất lượng khác nhau 720P 360P 240P 480P (nếu có) tùy theo đường truyền
|
||||
của bạn để tiết kiệm dung lượng internet. Hãy chia sẻ {{ $currentMovie->name }} trên
|
||||
{{ request()->getHost() }} tới mọi người để cùng thưởng thức nhé.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bottom tags">
|
||||
{!! $currentMovie->tags->map(function ($tag) {
|
||||
return '<a href="' . $tag->getUrl() . '" tite="Phim ' . $tag->name . ' rel="tag"">' . $tag->name . '</a>';
|
||||
})->implode('') !!}
|
||||
</div>
|
||||
</div>
|
||||
<div class='socialts'>
|
||||
<a href="https://www.facebook.com/sharer/sharer.php?u={{ $currentMovie->getUrl() }}&t={{ $currentMovie->name }}"
|
||||
target="_blank" class="fb"> <i class="fab fa-facebook-f"></i> <span>Facebook</span> </a> <a
|
||||
href="https://www.twitter.com/intent/tweet?url={{ $currentMovie->getUrl() }}&text={{ $currentMovie->name }}"
|
||||
target="_blank" class="twt"> <i class="fab fa-twitter"></i> <span>Twitter</span> </a> <a
|
||||
href="whatsapp://send?text={{ $currentMovie->name }} {{ $currentMovie->getUrl() }}" target="_blank"
|
||||
class="wa"> <i class="fab fa-whatsapp"></i> <span>WhatsApp</span> </a> <a
|
||||
href="https://pinterest.com/pin/create/button/?url={{ $currentMovie->getUrl() }}&media={{ $currentMovie->getThumbUrl() }}&description={{ $currentMovie->name }}"
|
||||
target="_blank" class="pntrs"> <i class="fab fa-pinterest-p"></i> <span>Pinterest</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="bixbox synp">
|
||||
<div class="releases">
|
||||
<h2>Thông tin phim {{ $currentMovie->name }}</h2>
|
||||
</div>
|
||||
<div class="entry-content" itemprop="description">
|
||||
{!! $currentMovie->content !!}
|
||||
</div>
|
||||
</div>
|
||||
@if ($currentMovie->type == 'series' && $watchUrl != '#')
|
||||
<div class="bixbox bxcl epcheck">
|
||||
<div class="releases">
|
||||
<h2>Xem {{ $currentMovie->name }}</h2>
|
||||
</div>
|
||||
<div class="lastend">
|
||||
<div class="inepcx"><a href="{{ $watchUrl }}"> <span>Tập đầu</span> <span
|
||||
class="epcur epcurfirst">Tập {{ $firstWatchName }}</span>
|
||||
</a></div>
|
||||
<div class="inepcx"><a href="{{ $watchUrlLast }}">
|
||||
<span>{{ $currentMovie->status == 'completed' ? 'Tập cuối' : 'Tập mới' }}</span>
|
||||
<span class="epcur epcurlast">Tập {{ $lastWatchName }}</span> </a></div>
|
||||
</div>
|
||||
<div class="eplister">
|
||||
<div class="ephead">
|
||||
<div class="eph-num">STT</div>
|
||||
<div class="eph-title">Tiêu đề</div>
|
||||
<div class="eph-sub">Server</div>
|
||||
</div>
|
||||
<ul>
|
||||
|
||||
@foreach ($currentMovie->episodes->sortBy([['server', 'desc']])->groupBy('server')->take(1) as $server => $data)
|
||||
@foreach ($data->sortByDesc('name', SORT_NATURAL)->groupBy('name')->take(15) as $name => $item)
|
||||
<li><a href="{{ $item->sortByDesc('type')->first()->getUrl() }}">
|
||||
<div class="epl-num">{{ $name }}</div>
|
||||
<div class="epl-title">{{ $currentMovie->name }} Tập {{ $name }}</div>
|
||||
<div class="epl-sub"><span class="status Hard Sub">{{ $server }}</span>
|
||||
</div>
|
||||
</a></li>
|
||||
@endforeach
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@include('themes::themekiss.inc.comment')
|
||||
@include('themes::themekiss.inc.movie_related')
|
||||
</article>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script type='text/javascript' src='/themes/kiss/js/jquery.fancybox.min.js' id='fancybox-js'></script>
|
||||
{!! setting('site_scripts_facebook_sdk') !!}
|
||||
@endpush
|
||||
Reference in New Issue
Block a user