Initial commit

This commit is contained in:
vsphim
2026-05-20 11:47:28 +07:00
commit a1b567ab6e
43 changed files with 2051 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
@extends('themes::themeholy.layout')
@section('content')
@include('themes::themeholy.inc.main_search')
<section style="margin-top: 8vh;">
<div class="container" style="margin-bottom: 5vh;">
<h2 id="main" class="display-6 text-warning" style="font-size: calc(1.325rem + 0.9vw);text-align: center;">
{{ $section_name }}</h2>
<hr
style="background: linear-gradient(90deg, var(--bs-cyan), var(--bs-yellow)), rgb(255,193,7);transform: scale(1);width: 100%;height: 2px;filter: saturate(200%);">
</div>
<div class="container">
<div class="row row-cols-2 row-cols-sm-3 row-cols-md-4 row-cols-lg-4 row-cols-xl-5 row-cols-xxl-5">
@foreach ($data as $movie)
@include('themes::themeholy.inc.section_movies_item')
@endforeach
</div>
</div>
{{ $data->appends(request()->all())->links('themes::themeholy.inc.pagination') }}
</section>
@endsection

View File

@@ -0,0 +1,291 @@
@extends('themes::themeholy.layout')
@section('content')
<section class="clean-block clean-hero"
style="color: rgba(20,20,20,0.85);background: url({{ $currentMovie->getPosterUrl() }}) center / cover no-repeat;margin-top: -28vh;filter: blur(0px);margin-bottom: 0px;">
<div class="media-player text" id="pembed">
<p style="text-align: center;">Đang tải, đợi tí nhé ...</p>
</div>
</section>
<div class="text-center" style="margin-top: 3vh;">
@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 btn-outline-secondary"
style="margin-right: 1vw;padding-right: 15px;padding-left: 15px;padding-top: 5px;padding-bottom: 5px;font-size: calc(0.6rem + 0.4vw);margin-bottom: 1vh;">Nguồn
Phát
#{{ $loop->index + 1 }}</a>
@endforeach
</div>
<div class="container" style="margin-top: 1vw;">
<div class="block-content">
<h2 class="display-6 text-warning" style="font-size: calc(1.325rem + 0.9vw);text-align: center;">
{{ $currentMovie->name }}</h2>
<p class="text-center" style="color: rgb(255,255,255);">{{ $currentMovie->origin_name }}
({{ $currentMovie->publish_year }})</p>
@foreach ($currentMovie->episodes->sortBy([['server', 'asc']])->groupBy('server') as $server => $data)
<p class="text-center" style="color: rgb(255,255,255);margin-top: 2vw;">Danh Sách Tập {{ $server }}
</p>
<div class="text-center" style="margin-top: 3vh;">
@foreach ($data->sortByDesc('name', SORT_NATURAL)->groupBy('name') as $name => $item)
<a class='btn @if ($item->contains($episode)) btn-outline-warning @else btn-outline-secondary @endif'
style="margin-right: 1vw;padding-right: 15px;padding-left: 15px;padding-top: 5px;padding-bottom: 5px;font-size: calc(0.6rem + 0.4vw);margin-bottom: 1vh;"
title='{{ $name }}' href='{{ $item->sortByDesc('type')->first()->getUrl() }}'
>
{{ $name }}
</a>
@endforeach
</div>
@endforeach
</div>
@include('themes::themeholy.inc.comment')
</div>
@include('themes::themeholy.inc.section_related')
@endsection
@push('scripts')
<script src="/themes/holy/player/js/p2p-media-loader-core.min.js"></script>
<script src="/themes/holy/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 src="https://code.jquery.com/jquery-2.2.4.min.js"
integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></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('btn-outline-warning');
})
el.classList.add('btn-outline-warning');
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/holy/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 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 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 src="${link}" frameborder="0" scrolling="no" allowfullscreen="" allow='autoplay'></iframe>`
fake_player.remove();
});
} else {
if (wrapper) {
wrapper.innerHTML =
`<iframe 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>
{!! setting('site_scripts_facebook_sdk') !!}
@endpush

View File

@@ -0,0 +1,5 @@
<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>

View File

@@ -0,0 +1,18 @@
<section class="clean-block clean-hero"
style="color: rgba(20,20,20,0.85); background: url(/themes/holy/img/MainPoster.webp) center/cover no-repeat; margin-top: -20vh; filter: blur(0px); ">
<div class="text" style="margin-top: 20vh;">
<h1 style="font-size: calc(1.325rem + 0.9vw);color: rgb(240,190,8);">Thế Giới Phim HD Vietsub</h1>
<p style="font-style: italic;font-size: calc(1rem + 0.5vw);">"Từ khóa nào khiến bạn vui?<br>Bộ phim nào cho
bạn cảm hứng?"</p>
<div style="margin-bottom: 5vh;">
<div style="margin-bottom: 5vh;">
<form class="me-auto search-form" method="GET" action="/" id="form" target="_self" style="width: 80vw;min-width: 320px;max-width: 600px;">
<div class="d-flex align-items-center" style="width: 100%;margin-right: auto;margin-left: auto;">
<input class="form-control search-field" type="search" id="search-field-3" name="search"
style="width: 100%;min-width: 320px;max-width: 600px;margin-right: auto;margin-left: auto;color: rgb(255,255,255);background: rgba(0,0,0,0.55);border-color: rgb(240,190,8);height: 40px;text-align: center;"
placeholder="Tìm Kiếm Phim..." autocomplete="off" value="{{ request('search') }}"></div>
</form>
</div>
</div>
</div>
</section>

View File

@@ -0,0 +1,41 @@
@php
$logo = setting('site_logo', '');
$brand = setting('site_brand', '');
$title = isset($title) ? $title : setting('site_homepage_title', '');
@endphp
<nav class="navbar navbar-dark navbar-expand-lg fixed-top clean-navbar"
style="color: rgba(33,37,41,0.2);background: rgba(0,0,0,0.3);">
<div class="container">
<a class="navbar-brand logo" href="/" style="color: rgb(240,190,12);font-size: calc(1.325rem + 0.6vw);">
@if ($logo)
{!! $logo !!}
@else
{!! $brand !!}
@endif
</a>
<button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navcol-1"><span
class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navcol-1">
<ul class="navbar-nav ms-auto">
@foreach ($menu as $item)
@if (count($item['children']))
<li class="nav-item dropdown flex-nowrap" style="margin-top: 0px;">
<a class="dropdown-toggle nav-link" aria-expanded="false" data-bs-toggle="dropdown"
href="{{ $item['link'] }}">{{ $item['name'] }}</a>
<div class="dropdown-menu dropdown-menu-dark"
style="background: linear-gradient(180deg, rgba(0,0,0,0.3), rgba(0,0,0,1.0));">
@foreach ($item['children'] as $children)
<a class="dropdown-item" href="{{ $children['link'] }}">{{ $children['name'] }}</a>
@endforeach
</div>
</li>
@else
<li class="nav-item item"><a class="nav-link" href="{{ $item['link'] }}">{{ $item['name'] }}</a>
</li>
@endif
@endforeach
</ul>
</div>
</div>
</nav>

View File

@@ -0,0 +1,40 @@
@if ($paginator->hasPages())
<div class="text-center" style="margin-top: 3vh;">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
@else
<a class="btn btn-outline-secondary" type="button"
style="margin-right: 1vw;padding-right: 15px;padding-left: 15px;padding-top: 5px;padding-bottom: 5px;font-size: calc(0.6rem + 0.4vw);margin-bottom: 1vh;"
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"
style="margin-right: 1vw;padding-right: 15px;padding-left: 15px;padding-top: 5px;padding-bottom: 5px;font-size: calc(0.6rem + 0.4vw);margin-bottom: 1vh;"
class="btn btn-outline-warning">{{ $page }}</span>
@else
<a class="btn btn-outline-secondary" type="button"
style="margin-right: 1vw;padding-right: 15px;padding-left: 15px;padding-top: 5px;padding-bottom: 5px;font-size: calc(0.6rem + 0.4vw);margin-bottom: 1vh;"
href="{{ $url }}">{{ $page }}</a>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<a class="btn btn-outline-secondary" type="button"
style="margin-right: 1vw;padding-right: 15px;padding-left: 15px;padding-top: 5px;padding-bottom: 5px;font-size: calc(0.6rem + 0.4vw);margin-bottom: 1vh;"
href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">Next »</a>
@else
@endif
</div>
@endif

View File

@@ -0,0 +1,7 @@
<section style="margin-top: 8vh;">
<div class="text-center" style="margin-top: 3vh;">
<a class="btn btn-outline-warning" type="button" href="#" style="margin-right: 1vw;padding-right: 15px;padding-left: 15px;padding-top: 5px;padding-bottom: 5px;font-size: calc(0.6rem + 0.4vw);margin-bottom: 1vh;">
<b>Công Cụ Tìm Kiếm</b>
</a>
</div>
</section>

View File

@@ -0,0 +1,26 @@
<section style="margin-top: 8vh;">
<div class="container" style="margin-bottom: 5vh;">
<h2 class="display-6 text-warning" style="font-size: calc(1.325rem + 0.9vw);text-align: center;">
{{ $item['label'] }}</h2>
<p class="text-center text-light" style="font-size: calc(0.8rem + 0.1vw);">{{ $item['description'] }}</p>
<hr
style="background: linear-gradient(90deg, var(--bs-cyan), var(--bs-yellow)), rgb(255,193,7);transform: scale(1);width: 100%;height: 2px;filter: saturate(200%);">
</div>
<div class="container">
<div class="row row-cols-2 row-cols-sm-3 row-cols-md-4 row-cols-lg-4 row-cols-xl-5 row-cols-xxl-5">
@foreach ($item['data'] as $movie)
@include('themes::themeholy.inc.section_movies_item')
@endforeach
</div>
</div>
@if ($item['link'] !== '' && $item['link'] !== '#')
<div class="text-center" style="margin-top: 3vh;">
<a class="btn btn-outline-warning" type="button" href="{{ $item['link'] }}"
style="margin-right: 1vw;padding-right: 15px;padding-left: 15px;padding-top: 5px;padding-bottom: 5px;font-size: calc(0.6rem + 0.4vw);margin-bottom: 1vh;">
<b>Xem Thêm</b>
</a>
</div>
@endif
</section>

View File

@@ -0,0 +1,23 @@
<div class="col-md-2.5" style="margin-bottom: 1vh;padding-right: 4px;padding-left: 4px;">
<div class="card" style="background: rgb(20,20,20);">
<a href="{{$movie->getUrl()}}">
<img
class="lazy card-img-top w-100 d-block"
style="height: 145px"
src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
data-src="{{ $movie->getPosterUrl() }}" alt="{{$movie->name}} - {{$movie->origin_name}} ({{$movie->publish_year}})">
</a>
<div class="card-body" style="padding: 10px;padding-right: 1px;padding-left: 1px;">
<h4 class="text-truncate card-title" style="text-align: center;color: rgb(255,193,10);font-size: calc(0.8rem + 0.4vw);width: 100%;">
{{$movie->name}}
</h4>
<p class="text-truncate card-text"
style="text-align: center;color: rgb(255,255,255);width: 100%;font-size: calc(0.8rem + 0.1vw);">
({{$movie->publish_year}})</p>
</div>
<div class="mx-auto">
<a class="btn btn-outline-warning btn-sm" type="button"
href="{{$movie->getUrl()}}">Xem Phim</a>
</div>
</div>
</div>

View File

@@ -0,0 +1,22 @@
<section style="margin-top: 8vh;">
<div class="container" style="margin-bottom: 5vh;">
<h2 class="display-6 text-warning" style="font-size: calc(1.325rem + 0.9vw);text-align: center;">Phim cùng thể loại</h2>
<p class="text-center text-light" style="font-size: calc(0.8rem + 0.1vw);">Biết đâu bạn thích?</p>
<hr style="background: linear-gradient(90deg, var(--bs-cyan), var(--bs-yellow)), rgb(255,193,7);transform: scale(1);width: 100%;height: 2px;filter: saturate(200%);">
</div>
<div class="container">
<div class="row row-cols-2 row-cols-sm-3 row-cols-md-4 row-cols-lg-4 row-cols-xl-5 row-cols-xxl-5">
@foreach ($movie_related as $movie)
@include('themes::themeholy.inc.section_movies_item')
@endforeach
</div>
</div>
<div class="text-center" style="margin-top: 3vh;">
<button class="btn btn-outline-warning" type="button" onclick="location.href='/';" style="margin-right: 1vw;padding-right: 15px;padding-left: 15px;padding-top: 5px;padding-bottom: 5px;font-size: calc(0.6rem + 0.4vw);font-weight: bold;margin-bottom: 1vh;">
Công Cụ Tìm Kiếm
</button>
</div>
</section>

View File

@@ -0,0 +1,50 @@
@extends('themes::themeholy.layout')
@php
use VsMov\Core\Models\Movie;
$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, $description, $relation, $field, $val, $sortKey, $alg, $limit, $link] = array_merge($list, ['Phim mới cập nhật', '', '', 'type', 'series', 'created_at', 'desc', 8, '/']);
try {
$data[] = [
'label' => $label,
'description' => $description,
'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);
})
->orderBy($sortKey, $alg)
->limit($limit)
->get(),
'link' => $link ?: '#',
];
} catch (\Exception $e) {
}
}
}
return $data;
});
@endphp
@section('content')
@include('themes::themeholy.inc.main_search')
<main class="page landing-page">
@foreach ($data as $item)
@include('themes::themeholy.inc.section_movies')
@endforeach
@include('themes::themeholy.inc.random_film')
</main>
@endsection
@push('scripts')
@endpush

View File

@@ -0,0 +1,56 @@
@extends('themes::layout')
@php
$menu = \VsMov\Core\Models\Menu::getTree();
@endphp
@push('header')
<meta name="theme-color" content="#ffffff">
<link href="{{ asset('/themes/holy/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet" />
<link href="{{ asset('/themes/holy/css/fontstyle.css') }}" rel="stylesheet" />
<link href="{{ asset('/themes/holy/fonts/simple-line-icons.min.css') }}" rel="stylesheet" />
<link href="{{ asset('/themes/holy/css/styles.min.css') }}" rel="stylesheet" />
<link href="{{ asset('/themes/holy/css/baguetteBox.min.css') }}" rel="stylesheet" />
<link href="{{ asset('/themes/holy/css/custom.css') }}" rel="stylesheet" />
{{-- <style>
img.lazy {
background-image: url('http://jquery.eisbehr.de/lazy/images/loading.gif');
background-repeat: no-repeat;
background-position: 50% 50%;
}
</style> --}}
@endpush
@section('body')
@include('themes::themeholy.inc.nav')
<main class="page landing-page">
@yield('content')
</main>
@endsection
@push('scripts')
@endpush
@section('footer')
{!! get_theme_option('footer') !!}
<script src="https://code.jquery.com/jquery-2.2.4.min.js"
integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<!-- cdnjs -->
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazy/1.7.9/jquery.lazy.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazy/1.7.9/jquery.lazy.plugins.min.js">
</script>
<script>
$(function() {
$('.lazy').lazy({
effect: "fadeIn",
effectTime: 2000,
threshold: 0
});
});
</script>
<script defer src="{{ asset('/themes/holy/bootstrap/js/bootstrap.min.js') }}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.10.0/baguetteBox.min.js" integrity="sha512-4E202psbZszCpkybu3LZGLZk1Yfi7Mv8AhTzXzyJQ7lDKdXGC0ZJ+39q+PwBjEa9QbEzFyraZ0uab0nnhJ3fNg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="{{ asset('/themes/holy/js/script.min.js') }}"></script>
{!! setting('site_scripts_google_analytics') !!}
@endsection

View File

@@ -0,0 +1,105 @@
@extends('themes::themeholy.layout')
@php
$watchUrl = '#';
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();
$watchUrl = $firstWatch->getUrl();
}
@endphp
@section('content')
<section class="clean-block clean-hero"
style="color: rgba(20,20,20,0.85);background: url({{ $currentMovie->getPosterUrl() }}) center/cover no-repeat;margin-top: -28vh;filter: blur(0px);">
<div class="text" style="margin-top: 20vh;width: 80vw;max-width: 1280px;height: auto;">
<h1 style="font-size: calc(1.325rem + 0.9vw);color: rgb(240,190,8);">{{ $currentMovie->name }}
({{ $currentMovie->publish_year }})</h1>
<p style="font-style: italic;font-size: calc(1rem + 0.5vw);">{{ $currentMovie->origin_name }}</p>
<div class="mx-auto">
<a class="btn btn-outline-warning btn-sm" type="button" href="{{ $watchUrl }}">Xem Phim</a>
</div>
</div>
</section>
<div class="container" style="margin-top: 1vw;">
<div class="text-light block-content">
<div class="post-body">
<h3 style="color: rgb(255,193,7);text-align: justify;">{{ $currentMovie->name }}
({{ $currentMovie->publish_year }})</h3>
<div class="post-info" style="text-align: justify;"><span
style="text-align: justify;"><b>{{ $currentMovie->origin_name }}</b></span>
</div>
<p style="margin-top: 8px;text-align: justify;">
<p>
{!! $currentMovie->content !!}
</p>
<br>
</p>
<p style="margin-top: 8px;">
Lượt Xem: {{ $currentMovie->view_total }}<br />
Quốc Gia: {!! $currentMovie->regions->map(function ($region) {
return '<a href="' .
$region->getUrl() .
'" tite="Phim ' .
$region->name .
' rel="tag"">' .
$region->name .
'</a>';
})->implode(', ') !!} <br />
Năm Sản Xuất: {{ $currentMovie->publish_year }}<br />
Thể Loại: {!! $currentMovie->categories->map(function ($category) {
return '<a href="' .
$category->getUrl() .
'" tite="Phim ' .
$category->name .
' rel="tag"">' .
$category->name .
'</a>';
})->implode(', ') !!}<br />
Diễn viên: {!! $currentMovie->actors->map(function ($actor) {
return '<a href="' .
$actor->getUrl() .
'" tite="Diễn viên ' .
$actor->name .
' rel="tag"">' .
$actor->name .
'</a>';
})->implode(', ') !!}<br />
Đạo diễn: {!! $currentMovie->directors->map(function ($director) {
return '<a href="' .
$director->getUrl() .
'" tite="Đạo diễn ' .
$director->name .
' rel="tag"">' .
$director->name .
'</a>';
})->implode(', ') !!}<br />
Tags: {!! $currentMovie->tags->map(function ($tag) {
return '<a href="' . $tag->getUrl() . '" tite="Phim ' . $tag->name . ' rel="tag"">' . $tag->name . '</a>';
})->implode(', ') !!}<br />
</p>
</div>
</div>
@include('themes::themeholy.inc.comment')
</div>
@include('themes::themeholy.inc.section_related')
@endsection
@push('scripts')
{!! setting('site_scripts_facebook_sdk') !!}
@endpush