Initial commit

This commit is contained in:
vsphim
2026-05-20 11:48:27 +07:00
commit 124a4f4a72
52 changed files with 18861 additions and 0 deletions

View 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

View 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

View 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

View 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>

View 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>

View 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>

View 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>

View 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>

View 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

View 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>

View 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>

View File

@@ -0,0 +1,6 @@
<div id="sidebar">
@yield('mainepisode')
@foreach ($tops as $top)
@include('themes::themekiss.inc.' . $top['template'])
@endforeach
</div>

View 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>

View 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>

View 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>

View 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>

View 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

View 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

View 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