Add meilisearch support

This commit is contained in:
Amanmyrat 2023-05-10 11:46:17 +05:00
parent ad377e673e
commit 3287e4e45b
27 changed files with 1178 additions and 1081 deletions

View File

@ -8,7 +8,9 @@
"php": "^8.0.2",
"october/rain": "^3.3",
"laravel/framework": "^9.0",
"october/all": "^3.1"
"october/all": "^3.1",
"laravel/scout": "^10.1",
"meilisearch/meilisearch-php": "^1.1"
},
"require-dev": {
"phpunit/phpunit": "^8.5|^9.0"
@ -36,7 +38,8 @@
"config": {
"preferred-install": "dist",
"allow-plugins": {
"composer/installers": true
"composer/installers": true,
"php-http/discovery": true
}
},
"autoload": {

147
config/scout.php Normal file
View File

@ -0,0 +1,147 @@
<?php
use Indikator\News\Models\Posts;
return [
/*
|--------------------------------------------------------------------------
| Default Search Engine
|--------------------------------------------------------------------------
|
| This option controls the default search connection that gets used while
| using Laravel Scout. This connection is used when syncing all models
| to the search service. You should adjust this based on your needs.
|
| Supported: "algolia", "meilisearch", "database", "collection", "null"
|
*/
'driver' => env('SCOUT_DRIVER', 'algolia'),
/*
|--------------------------------------------------------------------------
| Index Prefix
|--------------------------------------------------------------------------
|
| Here you may specify a prefix that will be applied to all search index
| names used by Scout. This prefix may be useful if you have multiple
| "tenants" or applications sharing the same search infrastructure.
|
*/
'prefix' => env('SCOUT_PREFIX', ''),
/*
|--------------------------------------------------------------------------
| Queue Data Syncing
|--------------------------------------------------------------------------
|
| This option allows you to control if the operations that sync your data
| with your search engines are queued. When this is set to "true" then
| all automatic data syncing will get queued for better performance.
|
*/
'queue' => env('SCOUT_QUEUE', false),
/*
|--------------------------------------------------------------------------
| Database Transactions
|--------------------------------------------------------------------------
|
| This configuration option determines if your data will only be synced
| with your search indexes after every open database transaction has
| been committed, thus preventing any discarded data from syncing.
|
*/
'after_commit' => false,
/*
|--------------------------------------------------------------------------
| Chunk Sizes
|--------------------------------------------------------------------------
|
| These options allow you to control the maximum chunk size when you are
| mass importing data into the search engine. This allows you to fine
| tune each of these chunk sizes based on the power of the servers.
|
*/
'chunk' => [
'searchable' => 500,
'unsearchable' => 500,
],
/*
|--------------------------------------------------------------------------
| Soft Deletes
|--------------------------------------------------------------------------
|
| This option allows to control whether to keep soft deleted records in
| the search indexes. Maintaining soft deleted records can be useful
| if your application still needs to search for the records later.
|
*/
'soft_delete' => false,
/*
|--------------------------------------------------------------------------
| Identify User
|--------------------------------------------------------------------------
|
| This option allows you to control whether to notify the search engine
| of the user performing the search. This is sometimes useful if the
| engine supports any analytics based on this application's users.
|
| Supported engines: "algolia"
|
*/
'identify' => env('SCOUT_IDENTIFY', false),
/*
|--------------------------------------------------------------------------
| Algolia Configuration
|--------------------------------------------------------------------------
|
| Here you may configure your Algolia settings. Algolia is a cloud hosted
| search engine which works great with Scout out of the box. Just plug
| in your application ID and admin API key to get started searching.
|
*/
'algolia' => [
'id' => env('ALGOLIA_APP_ID', ''),
'secret' => env('ALGOLIA_SECRET', ''),
],
/*
|--------------------------------------------------------------------------
| Meilisearch Configuration
|--------------------------------------------------------------------------
|
| Here you may configure your Meilisearch settings. Meilisearch is an open
| source search engine with minimal configuration. Below, you can state
| the host and key information for your own Meilisearch installation.
|
| See: https://docs.meilisearch.com/guides/advanced_guides/configuration.html
|
*/
'meilisearch' => [
'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'),
'key' => env('MEILISEARCH_KEY'),
'index-settings' => [
Posts::class => [
'sortableAttributes' => ['published_at','created_at','updated_at'],
],
// 'users' => [
// 'filterableAttributes'=> ['id', 'name', 'email'],
// ],
],
],
];

View File

@ -1,5 +1,8 @@
<?php namespace Indikator\News\Models;
use Event;
use Lang;
use Laravel\Scout\Searchable;
use Model;
use BackendAuth;
use Carbon\Carbon;
@ -7,6 +10,9 @@ use Cms\Classes\Page as CmsPage;
use Indikator\News\Models\Categories as NewsCategories;
use Db;
use App;
use October\Rain\Database\Traits\Sluggable;
use October\Rain\Database\Traits\Validation;
use October\Rain\Router\Router;
use Str;
use Url;
// require "plugins\\donatello-za\\rake-php-plus\\src\\RakePlus.php";
@ -24,8 +30,9 @@ use October\Rain\Support\Facades\Config;
class Posts extends Model
{
use \October\Rain\Database\Traits\Sluggable;
use \October\Rain\Database\Traits\Validation;
use Sluggable;
use Validation;
use Searchable;
public $implement = ['@RainLab.Translate.Behaviors.TranslatableModel'];
@ -57,7 +64,7 @@ class Posts extends Model
protected $slugs = [
'slug' => 'title'
];
protected $jsonable = [
'image'
];
@ -148,6 +155,21 @@ class Posts extends Model
]
];
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray()
{
return [
'title' => $this->title,
'slug'=> $this->slug,
'introductory'=> $this->introductory,
'content'=> $this->content
];
}
public $preview = null;
public function getSendAttribute() {
@ -416,7 +438,7 @@ class Posts extends Model
public function duplicate($post)
{
$clone = new Posts();
$clone->title = \Lang::get('indikator.news::lang.form.clone_of').' '.$post->title;
$clone->title = Lang::get('indikator.news::lang.form.clone_of').' '.$post->title;
$clone->slug = $post->slug.'-'.now()->format('Y-m-d-h-i-s');
$clone->status = 3;
$clone->introductory = $post->introductory;
@ -434,7 +456,7 @@ class Posts extends Model
$clone->save();
\Event::fire('indikator.news.posts.duplicate', [&$clone, $post]);
Event::fire('indikator.news.posts.duplicate', [&$clone, $post]);
return $clone;
}
@ -605,7 +627,7 @@ class Posts extends Model
$page->rewriteTranslatablePageUrl($locale);
$params = ['category' => $item->getCategory()['slug'], 'id' => $item->id, 'slug' => $item->slug];
$router = new \October\Rain\Router\Router;
$router = new Router;
$localeUrl = $router->urlFromPattern($page->url, $params);
return url($locale.$localeUrl);
@ -704,7 +726,7 @@ class Posts extends Model
}else{
$image = 'article/'. implode('/', array_slice(explode( "-", $image), 0, 3)) . '/'. $image_name;
}
$imagedata = getimagesize(storage_path("app/uploads/public/". $image));
return $imagedata[0] > $imagedata[1] ? "horizontal" : "vertical";
}

View File

@ -15,7 +15,7 @@ forceUrl = 1
<meta name="keywords" content="{{ this.page.meta_keywords }}">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap" rel="stylesheet">
<link rel="icon" type="image/png" href="{{ 'assets/images/favicon.png'|theme }}"/>
<link rel="shortcut icon" type="image/png" href="{{ 'assets/images/favicon.png'|theme }}"/>
@ -30,19 +30,18 @@ forceUrl = 1
{% partial 'header' data=activeLocale %}
{% page %}
{% partial 'footer' %}
</body>
<script src="{{ ['assets/js/jquery.js', 'assets/js/moment.min.js', 'assets/js/slick.min.js', 'assets/js/news-slider.js',
'assets/js/jquery.fancybox.min.js', 'assets/js/main.js']|theme }}"></script>
{% framework %}
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-BGT89NCBQC"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-BGT89NCBQC"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-BGT89NCBQC');
</script>
</html>
gtag('config', 'G-BGT89NCBQC');
</script>
</html>

View File

@ -13,7 +13,7 @@ forceUrl = 1
<meta name="keywords" content="{{ this.page.meta_keywords }}">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap" rel="stylesheet">
<link rel="icon" type="image/png" href="{{ 'assets/images/favicon.png'|theme }}"/>
<link rel="shortcut icon" type="image/png" href="{{ 'assets/images/favicon.png'|theme }}"/>
@ -23,18 +23,18 @@ forceUrl = 1
<title>{{ this.page.title | default(this.theme.site)}}</title>
</head>
<body>
{% partial 'header' data=activeLocale %}
{% page %}
{% partial 'footer' %}
<!-- Top =================== -->
<!-- Top =================== -->
<span class="to-top" id="to-top">
<img src="{{ 'assets/images/top-arrow.png'|theme }}" alt="top-arrow">
</span>
<!-- Top =================== -->
</body>
<script src="{{ ['assets/js/jquery.js', 'assets/js/moment.min.js', 'assets/js/slick.min.js', 'assets/js/news-slider.js',
@ -43,16 +43,17 @@ forceUrl = 1
<script>
new WOW().init();
</script>
{% framework %}
<!-- <script src="{{ 'assets/js/main.js'|theme }}"></script> -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-BGT89NCBQC"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-BGT89NCBQC');
</script>
</html>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-BGT89NCBQC"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-BGT89NCBQC');
</script>
</html>

View File

@ -4,15 +4,15 @@ layout = "default"
is_hidden = 0
==
<section class="error" id="intro">
<div class="auto_container">
<div class="error_wrap">
<div class="error_title">
Ошибка 404!
</div>
<div class="error_text">
Страница не найдена, попробуйте найти эту новость в
разделе <a href="{{ 'archive'|page}}" class="error_link" >Архив !</a>
</div>
<div class="auto_container">
<div class="error_wrap">
<div class="error_title">
Ошибка 404!
</div>
<div class="error_text">
Страница не найдена, попробуйте найти эту новость в
разделе <a href="{{ 'archive'|page}}" class="error_link" >Архив !</a>
</div>
</div>
</section>
</div>
</section>

View File

@ -4,282 +4,282 @@ layout = "default"
is_hidden = 0
==
<div class="privacy">
<div class="auto_container">
<div class="privacy_wrap">
<div class="privacy_title">
ПОЛИТИКА КОНФИДЕНЦИАЛЬНОСТИ
</div>
<p class="privacy_text">
Настоящая Политика конфиденциальности персональных данных (далее Политика конфиденциальности)
действует в отношении всей информации, которую электронное СМИ TDH (далее Сайт), расположенное на
доменном имени https://tdh.gov.tm/, может получить о Пользователе во время использования сайта.
</p>
<div class="privacy_sub-title">
1. ОПРЕДЕЛЕНИЕ ТЕРМИНОВ
</div>
<ul>
<li>
1.1 В настоящей Политике конфиденциальности используются следующие термины:
</li>
<ul>
<li>1.1.1. «Администрация сайта электронного СМИ TDH (далее Администрация сайта)»
уполномоченные сотрудники на управления сайтом, которые организуют и (или) осуществляют
обработку персональных данных, а также определяет цели обработки персональных данных, состав
персональных данных, подлежащих обработке, действия (операции), совершаемые с персональными
данными.
</li>
<li>1.1.2. «Персональные данные» - любая информация, относящаяся к прямо или косвенно
определенному или определяемому физическому лицу (субъекту персональных данных).
</li>
<li>1.1.3. «Обработка персональных данных» - любое действие (операция) или совокупность действий
(операций), совершаемых с использованием средств автоматизации или без использования таких
средств с персональными данными, включая сбор, запись, систематизацию, накопление, хранение,
уточнение (обновление, изменение), извлечение, использование, передачу (распространение,
предоставление, доступ), обезличивание, блокирование, удаление, уничтожение персональных
данных.
</li>
<li>1.1.4. «Конфиденциальность персональных данных» - обязательное для соблюдения Оператором или
иным получившим доступ к персональным данным лицом требование не допускать их
распространения без согласия субъекта персональных данных или наличия иного законного
основания.
</li>
<li>1.1.5. «Пользователь сайта электронного СМИ TDH (далее Пользователь)» лицо, имеющее доступ
к Сайту, посредством сети Интернет и использующее Сайт</li>
<li>1.1.6. «Cookies» — небольшой фрагмент данных, отправленный веб-сервером и хранимый на
компьютере пользователя, который веб-клиент или веб-браузер каждый раз пересылает
веб-серверу в HTTP-запросе при попытке открыть страницу соответствующего сайта.</li>
<li>1.1.7. «IP-адрес» — уникальный сетевой адрес узла в компьютерной сети, построенной по
протоколу IP.
</li>
</ul>
</ul>
<div class="privacy_sub-title">
2. ОБЩИЕ ПОЛОЖЕНИЯ
</div>
<ul>
<li>2.1. Использование Пользователем Сайта означает согласие с настоящей Политикой
конфиденциальности и условиями обработки персональных данных Пользователя.
</li>
<li>2.2. В случае несогласия с условиями Политики конфиденциальности Пользователь должен прекратить
использование Сайта.
</li>
<li>2.3.Настоящая Политика конфиденциальности применяется только к электронному СМИ TDH Электронное
СМИ TDH не контролирует и не несет ответственность за сайты третьих лиц, на которые Пользователь
может перейти по ссылкам, доступным на Сайте.
</li>
<li>2.4. Администрация сайта не проверяет достоверность персональных данных, предоставляемых
Пользователем Сайта.
</li>
<li>2.5. Пользователь Сайта имеет полное право отозвать свои персональные данные в любой момент,
обратившись к Администрации Сайта.
</li>
</ul>
<div class="privacy_sub-title">
3. ПРЕДМЕТ ПОЛИТИКИ КОНФИДЕНЦИАЛЬНОСТИ
</div>
<ul>
<li>3.1. Настоящая Политика конфиденциальности устанавливает обязательства Администрации Сайта по
неразглашению и обеспечению режима защиты конфиденциальности персональных данных, которые
Пользователь предоставляет по запросу Администрации сайта при подписке на новости Сайта..
</li>
<li>3.2. Персональные данные, разрешённые к обработке в рамках настоящей Политики
конфиденциальности, предоставляются Пользователем путём заполнения контактной формы на Сайте:
</li>
<ul>
<li>
3.2.1 адрес электронной почты (e-mail);
</li>
</ul>
<li>3.3. Электронное СМИ TDH не защищает Данные, которые автоматически передаются в процессе
просмотра рекламных блоков и при посещении страниц.
</li>
<ol>
<li>IP адрес;</li>
<li>информация из cookies;</li>
<li>информация о браузере (или иной программе, которая осуществляет доступ к показу рекламы);
</li>
<li>время доступа;</li>
<li>адрес страницы, на которой расположен рекламный блок;</li>
<li>реферер (адрес предыдущей страницы).</li>
</ol>
<ul>
<li>
3.3.1. Отключение cookies может повлечь невозможность доступа к частям Сайта.
</li>
<li>
3.3.2. Сайт осуществляет сбор статистики об IP-адресах своих посетителей. Данная информация
используется с целью выявления и решения технических проблем.
</li>
</ul>
<li>
3.4. Любая иная персональная информация, неоговоренная выше (история посещения, используемые
браузеры и операционные системы и т.д.) подлежит надежному хранению и нераспространению, за
исключением случаев, предусмотренных в п.п. 5.2. настоящей Политики конфиденциальности.
</li>
</ul>
<div class="privacy_sub-title">
4. ЦЕЛИ СБОРА ПЕРСОНАЛЬНОЙ ИНФОРМАЦИИ ПОЛЬЗОВАТЕЛЯ
</div>
<ul>
<li>
4.1. Персональные данные Пользователя Администрация Сайта может использовать в целях:
</li>
<ul>
<li>
4.1.1. Идентификации Пользователя для направления ему по электронной почте актуальных
новостей и полезной информации от Администрации Сайта.
</li>
<li>
4.1.2. Установления с Пользователем обратной связи, включая направление уведомлений,
запросов, касающихся использования Сайта.
</li>
<li>
4.1.3. Определения места нахождения Пользователя для обеспечения безопасности,
предотвращения мошенничества.
</li>
<li>
4.1.4. Подтверждения достоверности и полноты персональных данных, предоставленных
Пользователем.
</li>
<li>
4.1.5. Предоставления Пользователю эффективной клиентской и технической поддержки при
возникновении проблем связанных с использованием Сайта.
</li>
</ul>
</ul>
<div class="privacy_sub-title">
5. СПОСОБЫ И СРОКИ ОБРАБОТКИ ПЕРСОНАЛЬНОЙ ИНФОРМАЦИИ
</div>
<ul>
<li>
5.1. Обработка персональных данных Пользователя осуществляется без ограничения срока, любым
законным способом, в том числе в информационных системах персональных данных с использованием
средств автоматизации или без использования таких средств.
</li>
<li>
5.2. Персональные данные Пользователя могут быть переданы уполномоченным органам государственной
власти Туркменистана только по основаниям и в порядке, установленным законодательством
Туркменистана.
</li>
<li>
5.3. Администрация сайта принимает необходимые организационные и технические меры для защиты
персональной информации Пользователя от неправомерного или случайного доступа, уничтожения,
изменения, блокирования, копирования, распространения, а также от иных неправомерных действий
третьих лиц.
</li>
</ul>
<div class="privacy_sub-title">
6. ОБЯЗАТЕЛЬСТВА СТОРОН
</div>
<ul>
<li>
6.1. Пользователь обязан:
</li>
<ul>
<li>
6.1.1. Предоставить информацию о персональных данных, необходимую для пользования Сайтом.
</li>
<li>
6.1.2. Обновить, дополнить предоставленную информацию о персональных данных в случае
изменения данной информации.
</li>
</ul>
<li>
6.2. Администрация сайта обязана:
</li>
<ul>
<li>
6.2.1. Использовать полученную информацию исключительно для целей, указанных в п. 4
настоящей Политики конфиденциальности.
</li>
<li>
6.2.2. Обеспечить хранение конфиденциальной информации в тайне, не разглашать, а также не
осуществлять продажу, обмен, опубликование, либо разглашение иными возможными способами
переданных персональных данных Пользователя, за исключением п.п. 5.2. настоящей Политики
Конфиденциальности.
</li>
<li>
6.2.3. Принимать меры предосторожности для защиты конфиденциальности персональных данных
Пользователя согласно порядку, обычно используемого для защиты такого рода информации в
существующем деловом обороте.
</li>
</ul>
</ul>
<div class="privacy_sub-title">
7. ОТВЕТСТВЕННОСТЬ СТОРОН
</div>
<ul>
<li>
7.1. В случае утраты или разглашения Конфиденциальной информации Администрация сайта не несёт
ответственность, если данная конфиденциальная информация:
</li>
<ul>
<li>
7.1.1. Стала публичным достоянием до её утраты или разглашения.
</li>
<li>
7.1.2. Была получена от третьей стороны до момента её получения Администрацией сайта.
</li>
<li>
7.1.3. Была разглашена с согласия Пользователя.
</li>
</ul>
</ul>
<div class="privacy_sub-title">
8. РАЗРЕШЕНИЕ СПОРОВ
</div>
<ul>
<li>
8.1. При не достижении соглашения спор будет передан на рассмотрение в судебный орган в
соответствии с действующим законодательством Туркменистана.
</li>
<li>
8.2. К настоящей Политике конфиденциальности и отношениям между Пользователем и Администрацией
сайта применяется действующее законодательство Туркменистана.
</li>
</ul>
<div class="privacy_sub-title">
9. ДОПОЛНИТЕЛЬНЫЕ УСЛОВИЯ
</div>
<ul>
<li>
9.1. Администрация сайта вправе вносить изменения в настоящую Политику конфиденциальности без
согласия Пользователя.
</li>
<li>
9.2. Политика конфиденциальности вступает в силу с момента ее размещения на Сайте,
</li>
<li>
9.3. Все предложения или вопросы по настоящей Политике конфиденциальности следует сообщать
<a href="#">
https://tdh.gov.tm/ru/contact#
</a>
</li>
<li>
9.4. Действующая Политика конфиденциальности размещена на странице по адресу
<a href="#">
http://event-live.ru/more/o-proekte/
</a>
</li>
</ul>
<div class="auto_container">
<div class="privacy_wrap">
<div class="privacy_title">
ПОЛИТИКА КОНФИДЕНЦИАЛЬНОСТИ
</div>
<p class="privacy_text">
Настоящая Политика конфиденциальности персональных данных (далее Политика конфиденциальности)
действует в отношении всей информации, которую электронное СМИ TDH (далее Сайт), расположенное на
доменном имени https://tdh.gov.tm/, может получить о Пользователе во время использования сайта.
</p>
<div class="privacy_sub-title">
1. ОПРЕДЕЛЕНИЕ ТЕРМИНОВ
</div>
<ul>
<li>
1.1 В настоящей Политике конфиденциальности используются следующие термины:
</li>
<ul>
<li>1.1.1. «Администрация сайта электронного СМИ TDH (далее Администрация сайта)»
уполномоченные сотрудники на управления сайтом, которые организуют и (или) осуществляют
обработку персональных данных, а также определяет цели обработки персональных данных, состав
персональных данных, подлежащих обработке, действия (операции), совершаемые с персональными
данными.
</li>
<li>1.1.2. «Персональные данные» - любая информация, относящаяся к прямо или косвенно
определенному или определяемому физическому лицу (субъекту персональных данных).
</li>
<li>1.1.3. «Обработка персональных данных» - любое действие (операция) или совокупность действий
(операций), совершаемых с использованием средств автоматизации или без использования таких
средств с персональными данными, включая сбор, запись, систематизацию, накопление, хранение,
уточнение (обновление, изменение), извлечение, использование, передачу (распространение,
предоставление, доступ), обезличивание, блокирование, удаление, уничтожение персональных
данных.
</li>
<li>1.1.4. «Конфиденциальность персональных данных» - обязательное для соблюдения Оператором или
иным получившим доступ к персональным данным лицом требование не допускать их
распространения без согласия субъекта персональных данных или наличия иного законного
основания.
</li>
<li>1.1.5. «Пользователь сайта электронного СМИ TDH (далее Пользователь)» лицо, имеющее доступ
к Сайту, посредством сети Интернет и использующее Сайт</li>
<li>1.1.6. «Cookies» — небольшой фрагмент данных, отправленный веб-сервером и хранимый на
компьютере пользователя, который веб-клиент или веб-браузер каждый раз пересылает
веб-серверу в HTTP-запросе при попытке открыть страницу соответствующего сайта.</li>
<li>1.1.7. «IP-адрес» — уникальный сетевой адрес узла в компьютерной сети, построенной по
протоколу IP.
</li>
</ul>
</ul>
<div class="privacy_sub-title">
2. ОБЩИЕ ПОЛОЖЕНИЯ
</div>
<ul>
<li>2.1. Использование Пользователем Сайта означает согласие с настоящей Политикой
конфиденциальности и условиями обработки персональных данных Пользователя.
</li>
<li>2.2. В случае несогласия с условиями Политики конфиденциальности Пользователь должен прекратить
использование Сайта.
</li>
<li>2.3.Настоящая Политика конфиденциальности применяется только к электронному СМИ TDH Электронное
СМИ TDH не контролирует и не несет ответственность за сайты третьих лиц, на которые Пользователь
может перейти по ссылкам, доступным на Сайте.
</li>
<li>2.4. Администрация сайта не проверяет достоверность персональных данных, предоставляемых
Пользователем Сайта.
</li>
<li>2.5. Пользователь Сайта имеет полное право отозвать свои персональные данные в любой момент,
обратившись к Администрации Сайта.
</li>
</ul>
<div class="privacy_sub-title">
3. ПРЕДМЕТ ПОЛИТИКИ КОНФИДЕНЦИАЛЬНОСТИ
</div>
<ul>
<li>3.1. Настоящая Политика конфиденциальности устанавливает обязательства Администрации Сайта по
неразглашению и обеспечению режима защиты конфиденциальности персональных данных, которые
Пользователь предоставляет по запросу Администрации сайта при подписке на новости Сайта..
</li>
<li>3.2. Персональные данные, разрешённые к обработке в рамках настоящей Политики
конфиденциальности, предоставляются Пользователем путём заполнения контактной формы на Сайте:
</li>
<ul>
<li>
3.2.1 адрес электронной почты (e-mail);
</li>
</ul>
<li>3.3. Электронное СМИ TDH не защищает Данные, которые автоматически передаются в процессе
просмотра рекламных блоков и при посещении страниц.
</li>
<ol>
<li>IP адрес;</li>
<li>информация из cookies;</li>
<li>информация о браузере (или иной программе, которая осуществляет доступ к показу рекламы);
</li>
<li>время доступа;</li>
<li>адрес страницы, на которой расположен рекламный блок;</li>
<li>реферер (адрес предыдущей страницы).</li>
</ol>
<ul>
<li>
3.3.1. Отключение cookies может повлечь невозможность доступа к частям Сайта.
</li>
<li>
3.3.2. Сайт осуществляет сбор статистики об IP-адресах своих посетителей. Данная информация
используется с целью выявления и решения технических проблем.
</li>
</ul>
<li>
3.4. Любая иная персональная информация, неоговоренная выше (история посещения, используемые
браузеры и операционные системы и т.д.) подлежит надежному хранению и нераспространению, за
исключением случаев, предусмотренных в п.п. 5.2. настоящей Политики конфиденциальности.
</li>
</ul>
<div class="privacy_sub-title">
4. ЦЕЛИ СБОРА ПЕРСОНАЛЬНОЙ ИНФОРМАЦИИ ПОЛЬЗОВАТЕЛЯ
</div>
<ul>
<li>
4.1. Персональные данные Пользователя Администрация Сайта может использовать в целях:
</li>
<ul>
<li>
4.1.1. Идентификации Пользователя для направления ему по электронной почте актуальных
новостей и полезной информации от Администрации Сайта.
</li>
<li>
4.1.2. Установления с Пользователем обратной связи, включая направление уведомлений,
запросов, касающихся использования Сайта.
</li>
<li>
4.1.3. Определения места нахождения Пользователя для обеспечения безопасности,
предотвращения мошенничества.
</li>
<li>
4.1.4. Подтверждения достоверности и полноты персональных данных, предоставленных
Пользователем.
</li>
<li>
4.1.5. Предоставления Пользователю эффективной клиентской и технической поддержки при
возникновении проблем связанных с использованием Сайта.
</li>
</ul>
</ul>
<div class="privacy_sub-title">
5. СПОСОБЫ И СРОКИ ОБРАБОТКИ ПЕРСОНАЛЬНОЙ ИНФОРМАЦИИ
</div>
<ul>
<li>
5.1. Обработка персональных данных Пользователя осуществляется без ограничения срока, любым
законным способом, в том числе в информационных системах персональных данных с использованием
средств автоматизации или без использования таких средств.
</li>
<li>
5.2. Персональные данные Пользователя могут быть переданы уполномоченным органам государственной
власти Туркменистана только по основаниям и в порядке, установленным законодательством
Туркменистана.
</li>
<li>
5.3. Администрация сайта принимает необходимые организационные и технические меры для защиты
персональной информации Пользователя от неправомерного или случайного доступа, уничтожения,
изменения, блокирования, копирования, распространения, а также от иных неправомерных действий
третьих лиц.
</li>
</ul>
<div class="privacy_sub-title">
6. ОБЯЗАТЕЛЬСТВА СТОРОН
</div>
<ul>
<li>
6.1. Пользователь обязан:
</li>
<ul>
<li>
6.1.1. Предоставить информацию о персональных данных, необходимую для пользования Сайтом.
</li>
<li>
6.1.2. Обновить, дополнить предоставленную информацию о персональных данных в случае
изменения данной информации.
</li>
</ul>
<li>
6.2. Администрация сайта обязана:
</li>
<ul>
<li>
6.2.1. Использовать полученную информацию исключительно для целей, указанных в п. 4
настоящей Политики конфиденциальности.
</li>
<li>
6.2.2. Обеспечить хранение конфиденциальной информации в тайне, не разглашать, а также не
осуществлять продажу, обмен, опубликование, либо разглашение иными возможными способами
переданных персональных данных Пользователя, за исключением п.п. 5.2. настоящей Политики
Конфиденциальности.
</li>
<li>
6.2.3. Принимать меры предосторожности для защиты конфиденциальности персональных данных
Пользователя согласно порядку, обычно используемого для защиты такого рода информации в
существующем деловом обороте.
</li>
</ul>
</ul>
<div class="privacy_sub-title">
7. ОТВЕТСТВЕННОСТЬ СТОРОН
</div>
<ul>
<li>
7.1. В случае утраты или разглашения Конфиденциальной информации Администрация сайта не несёт
ответственность, если данная конфиденциальная информация:
</li>
<ul>
<li>
7.1.1. Стала публичным достоянием до её утраты или разглашения.
</li>
<li>
7.1.2. Была получена от третьей стороны до момента её получения Администрацией сайта.
</li>
<li>
7.1.3. Была разглашена с согласия Пользователя.
</li>
</ul>
</ul>
<div class="privacy_sub-title">
8. РАЗРЕШЕНИЕ СПОРОВ
</div>
<ul>
<li>
8.1. При не достижении соглашения спор будет передан на рассмотрение в судебный орган в
соответствии с действующим законодательством Туркменистана.
</li>
<li>
8.2. К настоящей Политике конфиденциальности и отношениям между Пользователем и Администрацией
сайта применяется действующее законодательство Туркменистана.
</li>
</ul>
<div class="privacy_sub-title">
9. ДОПОЛНИТЕЛЬНЫЕ УСЛОВИЯ
</div>
<ul>
<li>
9.1. Администрация сайта вправе вносить изменения в настоящую Политику конфиденциальности без
согласия Пользователя.
</li>
<li>
9.2. Политика конфиденциальности вступает в силу с момента ее размещения на Сайте,
</li>
<li>
9.3. Все предложения или вопросы по настоящей Политике конфиденциальности следует сообщать
<a href="#">
https://tdh.gov.tm/ru/contact#
</a>
</li>
<li>
9.4. Действующая Политика конфиденциальности размещена на странице по адресу
<a href="#">
http://event-live.ru/more/o-proekte/
</a>
</li>
</ul>
</div>
</div>
</div>
</div>

View File

@ -11,26 +11,26 @@ localeUrl[en] = "/archive"
==
<?php
function onStart(){
if(input("date")){
$this['todayNews'] = \Indikator\News\Models\Posts::whereDate('published_at', '=', input("date"))->where("locale", App::getLocale())->where("status", 1)->where("category_id", "!=", $this->theme->colleagues_news)->orderBy('created_at', 'desc')->get();
}else{
$this['todayNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("status", 1)->where("category_id", "!=", $this->theme->colleagues_news)->orderBy('published_at', 'desc')->take(6)->get();
}
$this['dateToday'] = input("date");
if(input("date")){
$this['todayNews'] = \Indikator\News\Models\Posts::whereDate('published_at', '=', input("date"))
->where("locale", App::getLocale())->where("status", 1)
->where("category_id", "!=", $this->theme->colleagues_news)
->orderBy('created_at', 'desc')->get();
}else{
$this['todayNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())
->where("status", 1)->where("category_id", "!=", $this->theme->colleagues_news)
->orderBy('published_at', 'desc')
->take(6)->get();
}
$this['dateToday'] = input("date");
}
?>
==
<section class="section" id="intro">
<div class="auto_container">
<div class="which_page">
<a href="{{ 'index'|page}}">
<a href="{{ 'index'|page}}">
<div class="page_name">
{{'Главная'|_}}
</div>
@ -46,7 +46,7 @@ function onStart(){
{{'Архив'|_}}
</div>
<div class="main_news">
{% for item in todayNews %}
<div class="main_news-item">
<div class="main_news-date">
@ -63,18 +63,18 @@ function onStart(){
{{item.title}}</a>
</div>
<div class="main_news-text">
{{item.introductory|raw}}
</div>
</div>
</div>
{% endfor %}
{% endfor %}
</div>
</div>
<div class="right_side half full">
<div class="title">
{{'Календарь'|_}}
{{'Календарь'|_}}
</div>
<div class="cal">
@ -92,9 +92,9 @@ function onStart(){
<script src="{{ 'assets/js/moment.min.js'|theme }}"></script>
<script src="{{ 'assets/js/lightpick.js'|theme }}"></script>
<script>;
<script>
var picker = new Lightpick({
let picker = new Lightpick({
inline: true,
selectBackward: true,
selectForward: false,
@ -107,4 +107,4 @@ function onStart(){
window.location.replace("{{ ''| page}}?date=" + date.format("Y-M-D"));
}
});
</script>
</script>

View File

@ -21,12 +21,16 @@ categoryPage = "category"
==
<?php
function onStart(){
$this["category"] = $this->param('slug');
$this['lastNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("status", 1)->where("category_id", "!=", $this->theme->colleagues_news)->whereNotIn('category_id', [20,21,22])->orderBy('published_at', 'desc')->limit(6)->get();
$this['lastNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())
->where("status", 1)->where("category_id", "!=", $this->theme->colleagues_news)
->whereNotIn('category_id', [20,21,22])
->orderBy('published_at', 'desc')
->limit(6)->get();
}
function onEnd(){
if($this->newsPosts && $this->newsPosts->category){
$this->page->title = $this->newsPosts->category->name;
@ -39,8 +43,7 @@ function onEnd(){
<section class="section" id="intro">
<div class="auto_container">
<div class="which_page">
<a href="{{ 'index'|page}}">
<a href="{{ 'index'|page}}">
<div class="page_name">
{{'Главная'|_}}
</div>
@ -73,13 +76,13 @@ function onEnd(){
</a>
</div>
<div class="main_news-text">
{{ item.introductory|raw }}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="section_end">
<div class="page_num">
<a href="newsPosts.posts.previousPageUrl">
@ -97,7 +100,7 @@ function onEnd(){
</a>
</div>
<div class="page_list">
{{(newsPosts.posts.total/newsPosts.posts.perPage)|round(0,"ceil")}} {{'страниц'|_}}
{{(newsPosts.posts.total/newsPosts.posts.perPage)|round(0,"ceil")}} {{'страниц'|_}}
</div>
</div>
@ -107,7 +110,7 @@ function onEnd(){
<div class="title">
{{'Последние новости'|_}}
</div>
{% for item in lastNews %}
<div class="news_info">
<div class="left_date">
@ -115,7 +118,7 @@ function onEnd(){
</div>
<div class="left_info">
<div class="left_title">
<a href="{{ 'post'|page ({id: item.id, slug: item.slug})}}">{{item.category.name}}</a>
</div>
<div class="news_text">
@ -123,9 +126,9 @@ function onEnd(){
</div>
</div>
</div>
{% endfor %}
{% endfor %}
</div>
</div>
</div>
</section>
</section>

View File

@ -5,18 +5,15 @@ is_hidden = 0
==
<?php
function onStart(){
$this["channel"] = $this->param('slug');
}
?>
==
<div class="auto_container">
<div class="player-wrapper">
<div>
<video id="webtv-video" width="100%" height="100%" controls>Loading...</video>
</div>
<div>
<video id="webtv-video" width="100%" height="100%" controls>Loading...</video>
</div>
</div>
</div>
<div class="auto_container">
@ -75,9 +72,9 @@ function onStart(){
<script src="{{ 'assets/js/hls.min.js'|theme }}"></script>
<script src="{{ 'assets/js/plyr.js'|theme }}"></script>
<script>
var channel = '{{ channel }}'
let channel = '{{ channel }}'
switch(channel) {
case "altyn_asyr":
Altynasyr();
@ -100,63 +97,56 @@ function onStart(){
default:
Altynasyr();
}
function Altynasyr() {
$(function() {
var video_source = 'http://alpha.tv.online.tm/hls/ch001.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch001.m3u8';
}
var video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
var hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
let video_source = 'http://alpha.tv.online.tm/hls/ch001.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch001.m3u8';
}
let video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
let hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
};
}
function Yaslyk() {
console.log(channel);
$(function() {
var video_source = 'http://alpha.tv.online.tm/hls/ch002.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch002.m3u8';
}
var video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
var hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
let video_source = 'http://alpha.tv.online.tm/hls/ch002.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch002.m3u8';
}
let video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
let hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
};
}
@ -164,128 +154,128 @@ function Yaslyk() {
function Miras() {
$(function() {
var video_source = 'http://alpha.tv.online.tm/hls/ch003.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch003.m3u8';
}
var video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
var hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
let video_source = 'http://alpha.tv.online.tm/hls/ch003.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch003.m3u8';
}
let video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
let hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
};
}
function Sport() {
$(function() {
var video_source = 'http://alpha.tv.online.tm/hls/ch004.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch004.m3u8';
}
var video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
var hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
let video_source = 'http://alpha.tv.online.tm/hls/ch004.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch004.m3u8';
}
let video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
let hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
};
}
function Owaz() {
$(function() {
var video_source = 'http://alpha.tv.online.tm/hls/ch005.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch005.m3u8';
}
var video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
var hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
let video_source = 'http://alpha.tv.online.tm/hls/ch005.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch005.m3u8';
}
let video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
let hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
};
}
function Ashgabat() {
$(function() {
var video_source = 'http://alpha.tv.online.tm/hls/ch006.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch006.m3u8';
}
var video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
var hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
let video_source = 'http://alpha.tv.online.tm/hls/ch006.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch006.m3u8';
}
let video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
let hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
};
}
function Turkmenistan() {
$(function() {
var video_source = 'http://alpha.tv.online.tm/hls/ch007.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch007.m3u8';
}
var video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
var hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
let video_source = 'http://alpha.tv.online.tm/hls/ch007.m3u8';
if (location.protocol == 'https:') {
video_source = 'https://alpha.tv.online.tm/hls/ch007.m3u8';
}
let video = document.getElementById('webtv-video');
if(Hls.isSupported()) {
let hls = new Hls();
hls.loadSource(video_source);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = video_source;
video.addEventListener('canplay',function() {
video.play();
plyr.setup(video);
});
}
});
};
</script>
}
</script>

View File

@ -3,27 +3,11 @@ url = "/contact"
layout = "default"
is_hidden = 0
==
<?php
public function onSend(){
$vars = ['name' => Input::get('name') , 'email' => Input::get('email')];
Mail::send('admin.contact::mail.message', $vars, function($message) {
$message->to('tekemuradov@gmail.com', 'Admin Person');
$message->subject(Input::get('theme'));
});
}
?>
==
<section class="section" id="intro">
<div class="auto_container">
<div class="which_page">
<a href="{{ 'index'|page}}">
<div class="page_name">
{{'Главная'|_}}
</div>
@ -94,4 +78,4 @@ public function onSend(){
</script>
</div>
</div>
</section>
</section>

View File

@ -19,8 +19,11 @@ function onStart(){
$gallery = Admin\Photos\Models\Photo::orderBy("date",'desc')->paginate(10);
$this['gallery'] = $gallery;
$this['lastNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("status", 1)->where("category_id", "!=", $this->theme->colleagues_news)->whereNotIn('category_id', [20,21,22])->orderBy('published_at', 'desc')->limit(6)->get();
$this['lastNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("status", 1)
->where("category_id", "!=", $this->theme->colleagues_news)
->whereNotIn('category_id', [20,21,22])
->orderBy('published_at', 'desc')
->limit(6)->get();
}
?>
@ -29,7 +32,6 @@ function onStart(){
<div class="auto_container">
<div class="which_page">
<a href="{{ 'index'|page}}">
<div class="page_name">
{{'Главная'|_}}
</div>
@ -45,16 +47,16 @@ function onStart(){
{{'Фоторепортаж'|_}}
</div>
<div class="gallery_outer">
{% for key, item in gallery %}
<div class="gallery_item">
<div class="gallery_img fancybox" href="{{item.getImages().first.path}}" data-fancybox="{{key}}"
data-width="1500" data-height="1000">
<img src="{{item.image[0].thumb(auto, 270)}}" alt="">
</div>
<div style="display: none;">
{% for image in item.getImages().slice(1,item.getImages().size) %}
<a href="{{image.path}}" data-fancybox="{{key}}" data-width="1500"
@ -71,14 +73,9 @@ function onStart(){
</div>
</div>
</div>
{% endfor %}
</div>
{% if gallery.total > 10 %}
<div class="section_end">
<div class="page_num">
@ -106,7 +103,7 @@ function onStart(){
<div class="title">
{{'Последние новости'|_}}
</div>
{% for item in lastNews %}
<div class="news_info">
<div class="left_date">
@ -122,9 +119,9 @@ function onStart(){
</div>
</div>
</div>
{% endfor %}
{% endfor %}
</div>
</div>
</div>
</section>
</section>

View File

@ -26,58 +26,57 @@ protected $translator;
function onStart()
{
$this['currentLanguage'] = $this->activeLocale;
// featured news
$this->translator = Translator::instance();
$this['SelectedLanguage'] = $this->activeLocale = $this->translator->getLocale();
$featured = \Indikator\News\Models\Posts::where("featured", true)->where("locale", App::getLocale())->where("status", 1)->orderBy('published_at', 'desc')->get()->first();
$this['postFeatured'] = $featured;
// featured news
$featured = \Indikator\News\Models\Posts::where("featured", true)
->where("locale", App::getLocale())->where("status", 1)
->orderBy('published_at', 'desc')
->get()->first();
$this['postFeatured'] = $featured;
if($featured->image){
//$this['imageType'] = $featured->getImageDetails($featured->images->last->path->disk_name);
$this['imageType'] = $featured->image[0]["type"];
}
// end featured news
// last news
$this['lastNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("status", 1)->where("category_id", "!=", $this->theme->colleagues_news)->whereNotIn('category_id', [20,21,22])->orderBy('published_at', 'desc')->limit(10)->get();
$this['lastNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("status", 1)
->where("category_id", "!=", $this->theme->colleagues_news)
->whereNotIn('category_id', [20,21,22])
->orderBy('published_at', 'desc')
->limit(10)->get();
// end last news
// collegue News
// collegue News
$this['collegueNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())
->where("status", 1)
->where("category_id", $this->theme->colleagues_news)
->orderBy('published_at', 'desc')
->limit(9)->get();
$this['collegueNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("status", 1)->where("category_id", $this->theme->colleagues_news)->orderBy('published_at', 'desc')->limit(9)->get();
$this["collegueNews_cat"] = \Indikator\News\Models\Categories::where("id", $this->theme->colleagues_news)->first();
// end collegue News
// end collegue News
// intro news 3rd column
$this['intro_cat_news'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())
->where("status", 1)
->where("category_id", $this->theme->intro_cat_news)
->orderBy('published_at', 'desc')->limit(10)->get();
$this['intro_cat_news'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("status", 1)->where("category_id", $this->theme->intro_cat_news)->orderBy('published_at', 'desc')->limit(10)->get();
$this["intro_cat"] = \Indikator\News\Models\Categories::where("id", $this->theme->intro_cat_news)->first();
// end intro new
}
?>
==
{% set CurrentLanguage = SelectedLanguage %}
<!-- Intro ===================== -->
{% partial 'home_intro' %}
<!-- partial 'year_category' -->
<!-- partial 'year_category' -->
{% partial 'home_categories' %}
{% partial 'home_media' %}
{% partial 'home_media' %}

View File

@ -20,15 +20,17 @@ function onStart()
{
$this['currentLanguage'] = $this->activeLocale;
// featured news
$this->translator = Translator::instance();
$this['SelectedLanguage'] = $this->activeLocale = $this->translator->getLocale();
$featured = \Indikator\News\Models\Posts::where("featured", true)->where("locale", App::getLocale())
->where("status", 1)->orderBy('published_at', 'desc')
// featured news
$featured = \Indikator\News\Models\Posts::where("featured", true)
->where("locale", App::getLocale())
->where("status", 1)
->orderBy('published_at', 'desc')
->get()->first();
$this['postFeatured'] = $featured;
$this['postFeatured'] = $featured;
if($featured->image){
$this['imageType'] = $featured->image[0]["type"];
}
@ -38,7 +40,9 @@ function onStart()
// last news
$this['lastNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())
->where("status", 1)->where("category_id", "!=", $this->theme->colleagues_news)
->whereNotIn('category_id', [20,21,22])->orderBy('published_at', 'desc')->limit(10)->get();
->whereNotIn('category_id', [20,21,22])
->orderBy('published_at', 'desc')
->limit(10)->get();
// end last news
$this['partners'] = \Admin\Partners\Models\Partner::where('type', 'partner')->get();
@ -47,11 +51,12 @@ function onStart()
// intro news 3rd column
$this['intro_cat_news'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())
->where("status", 1)->where("category_id", $this->theme->intro_cat_news)
->orderBy('published_at', 'desc')->limit(10)->get();
->orderBy('published_at', 'desc')
->limit(10)->get();
$this["intro_cat"] = \Indikator\News\Models\Categories::where("id", $this->theme->intro_cat_news)->first();
// end intro new
}
?>
==
@ -60,4 +65,4 @@ function onStart()
{% partial 'home_new_intro' %}
{% partial 'home_new_banner_news' %}
{% partial 'home_new_last_news' %}
{% partial 'home_n_new_media' %}
{% partial 'home_n_new_media' %}

View File

@ -8,20 +8,20 @@ is_hidden = 0
<p>google <a href="https://play.google.com/store/apps/details?id=com.tpsadvertising.digital.tdh">play market</a></p>
<p>apple <a href="https://apps.apple.com/ru/app/tdh-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8/id1554832462">app store</a></p>
<script>
var userAgent = navigator.userAgent || navigator.vendor || window.opera;
let userAgent = navigator.userAgent || navigator.vendor || window.opera;
// Windows Phone must come first because its UA also contains "Android"
if (/windows phone/i.test(userAgent)) {
console.log("Windows Phone");
}
// Windows Phone must come first because its UA also contains "Android"
if (/windows phone/i.test(userAgent)) {
console.log("Windows Phone");
}
if (/android/i.test(userAgent)) {
location.replace('https://play.google.com/store/apps/details?id=com.tpsadvertising.digital.tdh');
}
if (/android/i.test(userAgent)) {
location.replace('https://play.google.com/store/apps/details?id=com.tpsadvertising.digital.tdh');
}
// iOS detection from: http://stackoverflow.com/a/9039885/177710
if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
location.replace('https://apps.apple.com/ru/app/tdh-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8/id1554832462');
}
// iOS detection from: http://stackoverflow.com/a/9039885/177710
if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
location.replace('https://apps.apple.com/ru/app/tdh-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8/id1554832462');
}
</script>
</script>

View File

@ -9,9 +9,11 @@ id = "{{ :id }}"
==
<?php
function onStart(){
$this['lastNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("status", 1)->where("category_id", "!=", $this->theme->colleagues_news)->whereNotIn('category_id', [20,21,22])->orderBy('published_at', 'desc')->limit(10)->get();
$this['lastNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())
->where("status", 1)->where("category_id", "!=", $this->theme->colleagues_news)
->whereNotIn('category_id', [20,21,22])
->orderBy('published_at', 'desc')
->limit(10)->get();
}
?>
==
@ -21,27 +23,24 @@ function onStart(){
<div class="auto_container">
<div class="which_page">
<a href="{{ 'index'|page}}" class="page_name">
<div>
{{'Главная'|_}}
</div>
</a>
<div class="slash">\</div>
<a href="{{ 'category'|page({ slug: post.category.slug })}}" class="page_name">
<div>
{{ post.category.name }}
</div>
</a>
<div class="slash">\</div>
<div class="page_name">
{{ post.title }}
</div>
</div>
<div class="section_wrapper">
<div class="center">
<div class="title">
{{ post.category.name }}
@ -65,9 +64,9 @@ function onStart(){
<span>
{{ post.statistics }}
</span>
</div>
</div>
</div>
{% if post.image %}
{% if post.image|length > 1 %}
<div class="multiple_slider">
@ -80,9 +79,9 @@ function onStart(){
{% for key, item in post.image %}
{% if key != 0%}
<a href="{{ url('/') }}{{item.photo|media}}" class="multiple_item" data-fancybox="gallery">
<img src="{{ url('/') }}{{item.photo|media}}" alt="">
</a>
{% endif %}
{% endfor %}
@ -117,23 +116,21 @@ function onStart(){
<img src="{{ post.images[0].path }}" alt="">
</div>
{% endif %}
{% endif %}
<div {% if post.published_at |date('U') > '2021-02-01'|date('U') %} class="news_page-text" {% else %} class="para_wrap" {% endif %}>
<p class="para_text">
{{ post.content|raw }}
</p>
</div>
</div>
<div class="right_side break">
<div class="title">
{{'Последние новости'|_}}
</div>
<div class="theme">
<div class="theme-inner">
{% for item in lastNews %}
@ -150,7 +147,7 @@ function onStart(){
</div>
</div>
</div>
{% endfor %}
{% endfor %}
</div>
<div class="theme_btn">
@ -195,4 +192,4 @@ function onStart(){
</div>
</div>
</div>
</section>
</section>

View File

@ -9,34 +9,21 @@ localeTitle[en] = "Search"
localeUrl[ru] = "/search"
localeUrl[en] = "/search"
[newsPosts]
pageNumber = "{{ :page }}"
postsPerPage = 10
noPostsMessage = "No posts found"
sortOrder = "published_at desc"
postFeatured = 0
postPage = "archive"
categoryPage = "archive"
==
<?php
function onStart(){
$this['search_results'] = \Indikator\News\Models\Posts::search(
input("query"))->orderBy('published_at', 'desc')->paginate(10);
//$this['search_results'] = \Indikator\News\Models\Posts::searchWhere(input("q"))->where("locale", App::getLocale())->orderBy('created_at', 'desc')->paginate(10);
//$search_results = \Indikator\News\Models\Posts::searchWhere(input("search"))->orderBy('created_at', 'desc')->get();
//dd($search_results);
$this['query'] = input('q');
}
$this['query'] = input("query");
}
?>
==
<section class="section" id="intro">
<div class="auto_container">
<div class="which_page">
<a href="{{ 'index'|page}}">
<div class="page_name">
{{'Главная'|_}}
</div>
@ -52,53 +39,52 @@ function onStart(){
{{'Результат поиска'|_}}
</div>
<div class="main_news">
{% for item in newsPosts.posts %}
<div class="main_news-item">
<div class="main_news-date">
<span>
{{ item.published_at| date("d.m") }}
</span>
<span>
{{ item.published_at| date("Y") }}
</span>
</div>
<div class="main_news-content">
<div class="main_news-title">
{% for item in search_results %}
<div class="main_news-item">
<div class="main_news-date">
<span>
{{ item.published_at| date("d.m") }}
</span>
<span>
{{ item.published_at| date("Y") }}
</span>
</div>
<div class="main_news-content">
<div class="main_news-title">
<a href="{{ 'post'|page ({id: item.id, slug: item.slug})}}">
{{item.title}}
</a>
</div>
<div class="main_news-text">
{{ item.introductory|raw }}
<a href="{{ 'post'|page ({id: item.id, slug: item.slug})}}">
{{item.title}}
</a>
</div>
<div class="main_news-text">
{{ item.introductory|raw }}
</div>
</div>
</div>
</div>
{% endfor %}
{% endfor %}
</div>
{% if newsPosts.posts.total > 10 %}
{% if search_results.total > 10 %}
<div class="section_end">
<div class="page_num">
<a href="{{newsPosts.posts.previousPageUrl}}{{'&q='~query}}">
<a href="{{search_results.previousPageUrl}}">
<div class="direct_btn">
<img src="{{ 'assets/images/left.svg'|theme }}" alt="">
</div>
</a>
<form action="" method="GET">
<input type="text" name="page" value="{{newsPosts.posts.currentPage}}" class="input_page">
<input type="hidden" name="query" value="{{query}}" />
<input type="text" name="page" value="{{search_results.currentPage}}" class="input_page">
</form>
<a href="{{newsPosts.posts.nextPageUrl}}{{'&q='~query}}">
<a href="{{search_results.nextPageUrl}}">
<div class="direct_btn">
<img src="{{ 'assets/images/right.svg'|theme }}" alt="">
</div>
</a>
</div>
<div class="page_list">
{{(newsPosts.posts.total/newsPosts.posts.perPage)|round(0,"ceil")}} {{'страниц'|_}}
{{(search_results.total/search_results.perPage)|round(0,"ceil")}} {{'страниц'|_}}
</div>
</div>
{% endif %}
@ -109,16 +95,16 @@ function onStart(){
</div>
<form class="form" method="GET">
<div class="input">
<input type="text" name="q" placeholder="Поиск">
<input type="text" name="query" placeholder="Поиск">
</div>
<button class="search">
<img src="{{ 'assets/images/lupa.svg'|theme }}" alt="">
</button>
</form>
<div class="found_news">
{{'По вашему запросу было найдено'|_}} <span class="quantity_num">{{newsPosts.posts.total}}</span> {{'статей'|_}}
{{'По вашему запросу было найдено'|_}} <span class="quantity_num">{{search_results.total}}</span> {{'статей'|_}}
</div>
</div>
</div>
</div>
</section>
</section>

View File

@ -15,12 +15,14 @@ localeMeta_description[en] = "Top news of Turkmenistan. News by tag Video Report
==
<?php
function onStart(){
$this['videos'] = Admin\Videos\Models\Video::orderBy('date','desc')->paginate(10);
$this['lastNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("status", 1)->where("category_id", "!=", $this->theme->colleagues_news)->whereNotIn('category_id', [20,21,22])->orderBy('published_at', 'desc')->limit(6)->get();
$this['lastNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())
->where("status", 1)
->where("category_id", "!=", $this->theme->colleagues_news)
->whereNotIn('category_id', [20,21,22])
->orderBy('published_at', 'desc')
->limit(6)->get();
}
?>
==
@ -51,9 +53,6 @@ function onStart(){
<div class="gallery_video" data-src="{{item.video[0].path}}">
<img src="{{item.image[0].thumb(350, auto)}}" alt="">
<!-- <div class="video_view" data-src="{{item.video[0].path}}">
{{'Просмотреть'|_}}
</div> -->
</div>
<div class="player_bg">
<div class="player">
@ -71,8 +70,6 @@ function onStart(){
<input type="range" name="volume" class="player__slider" min="0" max="1"
step="0.05" value="1">
</div>
<button class="player__button fullscreen bigger" title="FullScreen">🞕</button>
</div>
</div>
@ -112,7 +109,7 @@ function onStart(){
{{(videos.total/videos.perPage)|round(0,"ceil")}} {{'страниц'|_}}
</div>
</div>
{% endif %}
</div>
<div class="right_side break">
@ -145,77 +142,73 @@ function onStart(){
<script>
// Video Player
const video = document.querySelector('.viewer');
const toggle = document.querySelector('.toggle');
const volume = document.querySelector('.volume');
const skipButtons = document.querySelectorAll('[data-skip]');
const ranges = document.querySelectorAll('.player__slider');
const progress = document.querySelector('.progress');
const progressBar = document.querySelector('.progress__filled');
const fullscreen = document.querySelector('.fullscreen');
// Video Player
const video = document.querySelector('.viewer');
const toggle = document.querySelector('.toggle');
const volume = document.querySelector('.volume');
const skipButtons = document.querySelectorAll('[data-skip]');
const ranges = document.querySelectorAll('.player__slider');
const progress = document.querySelector('.progress');
const progressBar = document.querySelector('.progress__filled');
const fullscreen = document.querySelector('.fullscreen');
// defining functions
function togglePlay() {
// toggle for video play and pause
const playOrPause = video.paused ? 'play' : 'pause';
video[playOrPause]();
// toggle for icon change when play or pause
playOrPause === 'play' ? toggle.textContent = '❚ ❚' : toggle.textContent = '►';
}
// defining functions
function togglePlay() {
// toggle for video play and pause
const playOrPause = video.paused ? 'play' : 'pause';
video[playOrPause]();
// toggle for icon change when play or pause
playOrPause === 'play' ? toggle.textContent = '❚ ❚' : toggle.textContent = '►';
}
function skip() {
// add or substract the skip time to current time of video
video.currentTime += parseFloat(this.dataset.skip);
}
function skip() {
// add or substract the skip time to current time of video
video.currentTime += parseFloat(this.dataset.skip);
}
function handleRangeChange() {
// Change the video's range value
video[this.name] = this.value;
}
function handleRangeChange() {
// Change the video's range value
video[this.name] = this.value;
}
function handleProgress() {
// convert video's current time into percentage
const percent = (video.currentTime / video.duration) * 100;
// append it to the flexBasis property (CSS)
progressBar.style.flexBasis = `${percent}%`;
}
function handleProgress() {
// convert video's current time into percentage
const percent = (video.currentTime / video.duration) * 100;
// append it to the flexBasis property (CSS)
progressBar.style.flexBasis = `${percent}%`;
}
function scrub(e) {
const scrubTime = (e.offsetX / progress.offsetWidth) * video.duration;
video.currentTime = scrubTime;
}
function scrub(e) {
video.currentTime = (e.offsetX / progress.offsetWidth) * video.duration;
}
function handleFullScreen() {
video.requestFullscreen();
}
function handleFullScreen() {
video.requestFullscreen();
}
// Play or Pause events(On video click)
video.addEventListener('click', togglePlay);
// (On button click)
toggle.addEventListener('click', togglePlay);
// Play or Pause events(On video click)
video.addEventListener('click', togglePlay);
// (On button click)
toggle.addEventListener('click', togglePlay);
// skipping video back and forth
skipButtons.forEach(button => button.addEventListener('click', skip));
// skipping video back and forth
skipButtons.forEach(button => button.addEventListener('click', skip));
// volume or fast forward events
ranges.forEach(range => range.addEventListener('change', handleRangeChange));
// volume or fast forward events
ranges.forEach(range => range.addEventListener('change', handleRangeChange));
// Change progress wrt time
video.addEventListener('timeupdate', handleProgress);
// Change progress wrt time
video.addEventListener('timeupdate', handleProgress);
// event on clicking progress bar
let mouseDown = false;
progress.addEventListener('click', scrub);
progress.addEventListener('mousemove', (e) => mouseDown && scrub(e));
progress.addEventListener('mousedown', () => mouseDown = true);
progress.addEventListener('mouseup', () => mouseDown = false);
// event on clicking progress bar
let mouseDown = false;
progress.addEventListener('click', scrub);
progress.addEventListener('mousemove', (e) => mouseDown && scrub(e));
progress.addEventListener('mousedown', () => mouseDown = true);
progress.addEventListener('mouseup', () => mouseDown = false);
// add full screen event
fullscreen.addEventListener('click', handleFullScreen);
// add full screen event
fullscreen.addEventListener('click', handleFullScreen);
</script>
</script>

View File

@ -5,30 +5,34 @@ is_hidden = 0
==
<?php
function onStart(){
//phpinfo();
$month = Input::get('month');
$year = Input::get('year');
$paginate = 15;
if(isset($month)){
$this['month'] = $month;
}
if(isset($year)){
$this['year'] = $year;
}
if(isset($month) && isset($year)){
$this['news'] = Admin\WeeklyNews\Models\WeeklyNews::where("month", $month)->where("year", $year)->orderBy('year', 'DESC')->orderBy('month', 'DESC')->orderBy('week', 'DESC')->paginate($paginate);
$this['news'] = Admin\WeeklyNews\Models\WeeklyNews::where("month", $month)
->where("year", $year)->orderBy('year', 'DESC')
->orderBy('month', 'DESC')
->orderBy('week', 'DESC')->paginate($paginate);
}else if(isset($month) || isset($year)){
$this['news'] = Admin\WeeklyNews\Models\WeeklyNews::where("month", $month)->orWhere("year", $year)->orderBy('year', 'DESC')->orderBy('month', 'DESC')->orderBy('week', 'DESC')->paginate($paginate);
$this['news'] = Admin\WeeklyNews\Models\WeeklyNews::where("month", $month)
->orWhere("year", $year)
->orderBy('year', 'DESC')->orderBy('month', 'DESC')-
>orderBy('week', 'DESC')->paginate($paginate);
}else{
$this['news'] = Admin\WeeklyNews\Models\WeeklyNews::orderBy('year', 'DESC')->orderBy('month', 'DESC')->orderBy('week', 'DESC')->paginate($paginate);
$this['news'] = Admin\WeeklyNews\Models\WeeklyNews::orderBy('year', 'DESC')
->orderBy('month', 'DESC')->orderBy('week', 'DESC')
->paginate($paginate);
}
//dd(Admin\WeeklyNews\Models\WeeklyNews::all());
}
?>
@ -78,9 +82,9 @@ function onStart(){
{{'November'|_}}
{% elseif month ==12 %}
{{'December'|_}}
{% endif %}
{% else %}
{{'Month'|_}}
{% endif %}
@ -99,7 +103,7 @@ function onStart(){
<option value="12">{{'December'|_}}</option>
</select>
</div>
<div class="select">
<select name="year" onchange="onYearSelect(this)">
<option value="">
@ -108,20 +112,17 @@ function onStart(){
{% else %}
{{'Year'|_}}
{% endif %}
</option>
<option value="2021">2021</option>
<!-- <option value="2020">2020</option>
<option value="2019">2019</option> -->
</select>
</div>
</div>
</div>
<div class="magazines">
{% for key, item in news %}
<div class="magazine_item">
<div class="magazine_photo">
@ -143,10 +144,10 @@ function onStart(){
{% elseif activeLocale == "en" %}
<a href="{{item.pdf_en.getPath()}}" class="magazine_btn" download> {{'Скачать'|_}} </a>
{% endif %}
</div>
{% endfor %}
</div>
{% if news.total > 15 %}
<div class="section_end">
@ -174,20 +175,13 @@ function onStart(){
</div>
</section>
<script>
//if({{month}}){
// var month = {{month}};
//}
//var year = {{year}};
var url_string = window.location.href;
var url = new URL(url_string);
var month = url.searchParams.get("month");
var year = url.searchParams.get("year");
let url_string = window.location.href;
let url = new URL(url_string);
let month = url.searchParams.get("month");
let year = url.searchParams.get("year");
console.log("month: " + month + "\n" + "year: " + year);
function onMonthSelect(month){
@ -198,9 +192,9 @@ function onStart(){
}else{
window.location.replace('{{"weekly-news"|page}}?month=' + month.value);
}
}
function onYearSelect(year){
window.location.replace('{{"weekly-news"|page}}?year=' + year.value);
@ -209,81 +203,81 @@ function onStart(){
}else{
window.location.replace('{{"weekly-news"|page}}?year=' + year.value);
}
}
</script>
<script>
// select box ====================
<script>
// select box ====================
var x, i, j, l, ll, selElmnt, a, b, c;
x = document.getElementsByClassName("custom-select");
l = x.length;
for (i = 0; i < l; i++) {
selElmnt = x[i].getElementsByTagName("select")[0];
ll = selElmnt.length;
a = document.createElement("DIV");
a.setAttribute("class", "select-selected");
a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;
x[i].appendChild(a);
b = document.createElement("DIV");
b.setAttribute("class", "select-items select-hide");
for (j = 1; j < ll; j++) {
c = document.createElement("DIV");
c.innerHTML = selElmnt.options[j].innerHTML;
c.addEventListener("click", function (e) {
var y, i, k, s, h, sl, yl;
s = this.parentNode.parentNode.getElementsByTagName("select")[0];
sl = s.length;
h = this.parentNode.previousSibling;
for (i = 0; i < sl; i++) {
if (s.options[i].innerHTML == this.innerHTML) {
s.selectedIndex = i;
h.innerHTML = this.innerHTML;
let x, i, j, l, ll, selElmnt, a, b, c;
x = document.getElementsByClassName("custom-select");
l = x.length;
for (i = 0; i < l; i++) {
selElmnt = x[i].getElementsByTagName("select")[0];
ll = selElmnt.length;
a = document.createElement("DIV");
a.setAttribute("class", "select-selected");
a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;
x[i].appendChild(a);
b = document.createElement("DIV");
b.setAttribute("class", "select-items select-hide");
for (j = 1; j < ll; j++) {
c = document.createElement("DIV");
c.innerHTML = selElmnt.options[j].innerHTML;
c.addEventListener("click", function (e) {
let y, i, k, s, h, sl, yl;
s = this.parentNode.parentNode.getElementsByTagName("select")[0];
sl = s.length;
h = this.parentNode.previousSibling;
for (i = 0; i < sl; i++) {
if (s.options[i].innerHTML == this.innerHTML) {
s.selectedIndex = i;
h.innerHTML = this.innerHTML;
y = this.parentNode.getElementsByClassName("same-as-selected");
yl = y.length;
for (k = 0; k < yl; k++) {
y[k].removeAttribute("class");
}
this.setAttribute("class", "same-as-selected");
break;
y = this.parentNode.getElementsByClassName("same-as-selected");
yl = y.length;
for (k = 0; k < yl; k++) {
y[k].removeAttribute("class");
}
this.setAttribute("class", "same-as-selected");
break;
}
h.click();
});
b.appendChild(c);
}
x[i].appendChild(b);
a.addEventListener("click", function (e) {
e.stopPropagation();
closeAllSelect(this);
this.nextSibling.classList.toggle("select-hide");
this.classList.toggle("select-arrow-active");
}
h.click();
});
b.appendChild(c);
}
function closeAllSelect(elmnt) {
var x, y, i, xl, yl, arrNo = [];
x = document.getElementsByClassName("select-items");
y = document.getElementsByClassName("select-selected");
xl = x.length;
yl = y.length;
for (i = 0; i < yl; i++) {
if (elmnt == y[i]) {
arrNo.push(i)
} else {
y[i].classList.remove("select-arrow-active");
}
}
for (i = 0; i < xl; i++) {
if (arrNo.indexOf(i)) {
x[i].classList.add("select-hide");
}
x[i].appendChild(b);
a.addEventListener("click", function (e) {
e.stopPropagation();
closeAllSelect(this);
this.nextSibling.classList.toggle("select-hide");
this.classList.toggle("select-arrow-active");
});
}
function closeAllSelect(elmnt) {
let x, y, i, xl, yl, arrNo = [];
x = document.getElementsByClassName("select-items");
y = document.getElementsByClassName("select-selected");
xl = x.length;
yl = y.length;
for (i = 0; i < yl; i++) {
if (elmnt == y[i]) {
arrNo.push(i)
} else {
y[i].classList.remove("select-arrow-active");
}
}
document.addEventListener("click", closeAllSelect);
for (i = 0; i < xl; i++) {
if (arrNo.indexOf(i)) {
x[i].classList.add("select-hide");
}
}
}
document.addEventListener("click", closeAllSelect);
// select box end ====================
</script>
</script>

View File

@ -3,7 +3,6 @@
function onStart(){
$categories = \Indikator\News\Models\Categories::where("hidden", 2)->where("status", 1)->limit(6)->get();
$this["categories"] = $categories;
}
?>
==
@ -16,11 +15,11 @@ function onStart(){
<img src="{{ logo.path }}" alt="">
</a>
<div class="head__right">
<form class="search__form" action="{{ 'search'|page }}" method="GET">
{{form_token()}}
{{form_token()}}
<div class="input__wrap">
<input type="text" class="for__search" name="q" placeholder="{{'Поиск'|_}}">
<input type="text" class="for__search" name="query" placeholder="{{'Поиск'|_}}">
<button type="submit" class="input__magnify">
<img src="{{ 'assets/images/lupa.svg'|theme }}" alt="">
</button>
@ -49,7 +48,7 @@ function onStart(){
</a>
<form action="{{ 'search'|page }}" method="GET" class="mobile__form">
<div class="mobile_input__wrap">
<input type="text" type="text" name="q" placeholder="{{'Поиск'|_}}">
<input type="text" type="text" name="query" placeholder="{{'Поиск'|_}}">
<button type="submit" class="mobile__magnify">
<img src="{{ 'assets/images/lupa.svg'|theme }}" alt="">
</button>
@ -72,7 +71,6 @@ function onStart(){
{% for item in categories %}
<a href="{{ 'category'|page({ slug: item.slug })}}" class="nav__link">{{item.name}}</a>
{% endfor %}
<!-- <a href="/{{data}}/rss.xml" class="nav__link" target="blank">RSS</a> -->
</div>
<div class="nav__col">
<a href="{{ 'archive'|page}}" class="nav__group">
@ -101,12 +99,12 @@ function onStart(){
{{'Фоторепортаж '|_}}
</a>
<a href="{{ 'videos'|page}}" class="link__media">
{{'Видеорепортаж '|_}}
{{'Видеорепортаж '|_}}
</a>
</div>
</div>
<div class="nav__group">
{% if this.page.id == 'post' %}
{% if this.page.id == 'post' %}
<div class="new__lang">
<a href="{{ url('/tk') }}" class="lang__item">
<img src="{{ 'assets/images/lang_tm.png'|theme }}" alt="">
@ -118,20 +116,20 @@ function onStart(){
<img src="{{ 'assets/images/lang_en.png'|theme }}" alt="">
</a>
</div>
{% else %}
{% else %}
<div class="new__lang">
<a href="#" class="lang__item" data-request="onSwitchLocale" data-request-data="locale: 'tk'"> <img src="{{ 'assets/images/lang_tm.png'|theme }}" alt=""> </a>
<a href="#" class="lang__item" data-request="onSwitchLocale" data-request-data="locale: 'ru'"> <img src="{{ 'assets/images/lang_ru.png'|theme }}" alt=""> </a>
<a href="#" class="lang__item" data-request="onSwitchLocale" data-request-data="locale: 'en'"> <img src="{{ 'assets/images/lang_en.png'|theme }}" alt=""> </a>
<a href="#" class="lang__item" data-request="onSwitchLocale" data-request-data="locale: 'en'"> <img src="{{ 'assets/images/lang_en.png'|theme }}" alt=""> </a>
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
<!-- Navs ============================================================== -->
<!-- Navs ============================================================== -->

View File

@ -1,13 +1,16 @@
==
<?php
function onStart(){
$this['categories'] = \Indikator\News\Models\Categories::orderBy("sort_order")->where("id", "!=", $this->theme->politics_news)->limit(4)->get();
$this['categories'] = \Indikator\News\Models\Categories::orderBy("sort_order")
->where("id", "!=", $this->theme->politics_news)->limit(4)->get();
$this['interesting'] = Admin\Interesting\Models\Interesing::all();
$this['news'] = Admin\WeeklyNews\Models\WeeklyNews::orderBy('created_at', 'desc')->get()->first();
$this['mainNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("category_id", $this->theme->main_news)->orderBy('published_at', 'desc')->limit(4)->get();
$this['mainNews'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())
->where("category_id", $this->theme->main_news)
->orderBy('published_at', 'desc')->limit(4)->get();
$this["main_news_cat"] = \Indikator\News\Models\Categories::where("id", $this->theme->main_news)->first();
}
?>
@ -34,7 +37,7 @@ function onStart(){
<img src="{{ 'assets/images/placeholder.jpg'|theme }}" alt="">
{% endif %}
{% endif %}
</div>
<a href="{{ 'post'|page ({id: item.id, slug: item.slug})}}" class="foreign__text">
{{item.title}}
@ -55,7 +58,7 @@ function onStart(){
{% set post_banner_link = attribute(this.theme, 'post_banner_link_' ~ activeLocale) %}
<a target="_blank" href="{{post_banner_link}}" class="advert__photo">
{% set post_banner = attribute(this.theme, 'post_banner_' ~ activeLocale) %}
<img src="{{ post_banner.path }}" alt="">
</a>
</div>
@ -76,7 +79,7 @@ function onStart(){
<img src="{{ 'assets/images/arrow-right.svg'|theme }}" alt="">
</a>
</div>
<div class="recent__content">
{% for post in item.getPosts(3) %}
<div class="recent__item">
@ -90,22 +93,19 @@ function onStart(){
<img src="{{ 'assets/images/placeholder.jpg'|theme }}" alt="">
{% endif %}
{% endif %}
</div>
<div class="recent__info">
<!-- <div class="recent__time">
{{ post.published_at| date("d.m") }}
</div> -->
<a href="{{ ''| page}}/post/{{post.id}}/{{post.slug}}" class="recent__text">
{{ post.title }}
</a>
</div>
</div>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
</div>
@ -126,8 +126,6 @@ function onStart(){
</div>
<!-- Advert end ======================================================= -->
<div class="recent">
<div class="auto_container">
<div class="recent__inner">
@ -141,7 +139,7 @@ function onStart(){
<img src="{{ 'assets/images/arrow-right.svg'|theme }}" alt="">
</a>
</div>
<div class="recent__content">
{% for post in item.getPosts(3) %}
<div class="recent__item">
@ -158,7 +156,7 @@ function onStart(){
</div>
<div class="recent__info">
<!-- <div class="recent__time">
{{ post.published_at| date("d.m") }}
{{ post.published_at| date("d.m") }}
</div> -->
<a href="{{ ''| page}}/post/{{post.id}}/{{post.slug}}" class="recent__text">
{{ post.title }}
@ -166,10 +164,10 @@ function onStart(){
</div>
</div>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
</div>
@ -186,4 +184,4 @@ function onStart(){
</div>
</div>
</div>
<!-- New Banner end =================================================== -->
<!-- New Banner end =================================================== -->

View File

@ -3,7 +3,7 @@
<div class="new__intro" id="intro">
<div class="auto_container">
<div class="intro__inner">
<div {% if imageType == 'vertical' %} class="event__vertical" {% else %} class="event__horizontal" {% endif %}>
<div {% if imageType == 'vertical' %} class="event__vertical" {% else %} class="event__horizontal" {% endif %}>
<div class="title">
{{'В центре событий'|_}}
</div>
@ -47,34 +47,33 @@
{{item.title}}
</a>
</div>
{% endfor %}
{% endfor %}
</div>
</div>
<div class="other__news">
<div class="title">
<a href="{{ 'category'|page({ slug: intro_cat.slug })}}">
{{intro_cat.name}}
</a>
<a href="{{ 'category'|page({ slug: intro_cat.slug })}}">
<img src="{{ 'assets/images/arrow-right.svg'|theme }}" alt="">
</a>
</div>
<div {% if imageType == 'vertical' %} class="news__content" {% else %} class="horizontal_news__content" {% endif %}>
{% for item in intro_cat_news %}
<div class="content__item">
<a href="{{ ''| page}}/post/{{item.id}}/{{item.slug}}" class="content__title">
{{ item.published_at| date("d.m") }}
</a>
<a href="{{ ''| page}}/post/{{item.id}}/{{item.slug}}" class="content__text">
{{item.title}}
</a>
</div>
{% endfor %}
</div>
<div class="other__news">
<div class="title">
<a href="{{ 'category'|page({ slug: intro_cat.slug })}}">
{{intro_cat.name}}
</a>
<a href="{{ 'category'|page({ slug: intro_cat.slug })}}">
<img src="{{ 'assets/images/arrow-right.svg'|theme }}" alt="">
</a>
</div>
<div {% if imageType == 'vertical' %} class="news__content" {% else %} class="horizontal_news__content" {% endif %}>
{% for item in intro_cat_news %}
<div class="content__item">
<a href="{{ ''| page}}/post/{{item.id}}/{{item.slug}}" class="content__title">
{{ item.published_at| date("d.m") }}
</a>
<a href="{{ ''| page}}/post/{{item.id}}/{{item.slug}}" class="content__text">
{{item.title}}
</a>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
<!-- New Intro end ==================================================== -->
<!-- New Intro end ==================================================== -->

View File

@ -1,112 +1,93 @@
==
<?php
function onStart(){
$this['gallery'] = Admin\Photos\Models\Photo::orderBy("date", "desc")->limit(2)->get();
$this['videos'] = Admin\Videos\Models\Video::orderBy("date", "desc")->limit(2)->get();
}
?>
==
<!-- Media Content ==================================================== -->
<div class="Media">
<div class="auto_container">
<div class="media_inner">
<div class="media">
<div class="photo">
<div class="title">
<a href="{{ 'gallery'|page}}">{{'Фоторепортаж'|_}}</a>
<a href="{{ 'gallery'|page}}">
<img src="{{ 'assets/images/arrow-right.svg'|theme }}" alt="">
</a>
</div>
<div class="gallery">
{% for key, item in gallery %}
<div class="item">
<div class="item_img fancybox" href="{{item.getImages().first.path}}" data-fancybox="{{key}}"
data-width="1500" data-height="1000">
<img src="{{item.image[0].thumb(auto, 270)}}" alt="">
<!-- <h3 class="photo_view">
<a class="fancybox" href="{{item.getImages().first.path}}" data-fancybox="{{key}}"
data-width="1500" data-height="1000"><i
class="icon-camera"></i> {{'Просмотреть'|_}}</a>
</h3> -->
</div>
<div style="display: none;">
{% for image in item.getImages().slice(1,item.getImages().size) %}
<a href="{{image.path}}" data-fancybox-arrows="true" data-arrows="true" data-fancybox="{{key}}" data-width="1500"
data-height="1000" data-thumb="{{image.path}}"></a>
{% endfor %}
</div>
<div class="item_text">
{{ item.title }}
</div>
<!-- <div class="item_date">
{{ item.date| date("d.m.Y") }}
</div> -->
</div>
{% endfor %}
</div>
<div class="Media">
<div class="auto_container">
<div class="media_inner">
<div class="media">
<div class="photo">
<div class="title">
<a href="{{ 'gallery'|page}}">{{'Фоторепортаж'|_}}</a>
<a href="{{ 'gallery'|page}}">
<img src="{{ 'assets/images/arrow-right.svg'|theme }}" alt="">
</a>
</div>
<div class="video">
<div class="title">
<a href="{{ 'videos'|page}}">{{'Видеорепортаж'|_}}</a>
<a href="{{ 'videos'|page}}">
<img src="{{ 'assets/images/arrow-right.svg'|theme }}" alt="">
</a>
</div>
<div class="gallery">
{% for item in videos %}
<div class="gallery">
{% for key, item in gallery %}
<div class="item">
<div class="item_img video_item" data-src="{{item.video[0].path}}">
<img src="{{item.image[0].thumb(350, auto)}}" alt="">
<!-- <div class="video_view" data-src="{{item.video[0].path}}">
{{'Просмотреть'|_}}
</div> -->
</div>
<div class="player_bg">
<div class="player">
<video class="player__video viewer">
<!-- <source url="video/3.mp4"> -->
</video>
<div class="player__controls">
<div class="progress">
<div class="progress__filled"></div>
</div>
<button class="player__button toggle playeer" title="Toggle Play"></button>
<div class="control_item">
<img src="{{ 'assets/images/sound.svg'|theme }}" alt="" class="volume">
<input type="range" name="volume" class="player__slider" min="0" max="1"
step="0.05" value="1">
</div>
<button class="player__button fullscreen bigger" title="FullScreen">🞕</button>
<div class="item_img fancybox" href="{{item.getImages().first.path}}" data-fancybox="{{key}}"
data-width="1500" data-height="1000">
<img src="{{item.image[0].thumb(auto, 270)}}" alt="">
</div>
<div style="display: none;">
{% for image in item.getImages().slice(1,item.getImages().size) %}
<a href="{{image.path}}" data-fancybox-arrows="true" data-arrows="true" data-fancybox="{{key}}" data-width="1500"
data-height="1000" data-thumb="{{image.path}}"></a>
{% endfor %}
</div>
<div class="item_text">
{{ item.title }}
</div>
</div>
{% endfor %}
</div>
</div>
<div class="video">
<div class="title">
<a href="{{ 'videos'|page}}">{{'Видеорепортаж'|_}}</a>
<a href="{{ 'videos'|page}}">
<img src="{{ 'assets/images/arrow-right.svg'|theme }}" alt="">
</a>
</div>
<div class="gallery">
{% for item in videos %}
<div class="item">
<div class="item_img video_item" data-src="{{item.video[0].path}}">
<img src="{{item.image[0].thumb(350, auto)}}" alt="">
</div>
<div class="player_bg">
<div class="player">
<video class="player__video viewer"></video>
<div class="player__controls">
<div class="progress">
<div class="progress__filled"></div>
</div>
<button class="player__button toggle playeer" title="Toggle Play"></button>
<div class="control_item">
<img src="{{ 'assets/images/sound.svg'|theme }}" alt="" class="volume">
<input type="range" name="volume" class="player__slider" min="0" max="1"
step="0.05" value="1">
</div>
<button class="player__button fullscreen bigger" title="FullScreen">🞕</button>
</div>
</div>
<div class="item_text">
{{ item.title }}
</div>
<!-- <div class="item_date">
{{ item.date| date("d.m.Y") }}
</div> -->
</div>
{% endfor %}
</div>
<div class="item_text">
{{ item.title }}
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
<!-- Media Content end ================================================ -->
</div>
<!-- Media Content end ================================================ -->
<!-- Channel ===================== -->
<div class="auto_container">
@ -158,4 +139,4 @@ function onStart(){
</div><!-- chanel__items -->
</div> <!-- channel__inner -->
</div><!-- channel -->
</div> <!-- container -->
</div> <!-- container -->

View File

@ -33,7 +33,7 @@ function onStart(){
</div>
{% endfor %}
</div>
<div class="media_video">
<a href="{{'videos'|page}}" class="title">
<span>
@ -77,7 +77,7 @@ function onStart(){
<div class="web_item-photo">
<img src="{{ item.image.path }}" alt="web_item-photo">
</div>
<h4 class="web_item-title">
{{ item.title }}
</h4>
@ -93,21 +93,21 @@ function onStart(){
<script>
function openImageModal(images){
var media_wrapper = document.getElementById('media_section');
var modalItems = [];
let media_wrapper = document.getElementById('media_section');
let modalItems = [];
for (let i = 0; i < images.length / 12; i++) {
var modal_images = [];
let modal_images = [];
images.slice(i*12,(i+1)*12).forEach(function(image, index) {
var image =
let img =
`
<a class="fancybox modal_gal-item" href="${image.path}" data-fancybox="gallery">
<img src="${image.path}" alt="" />
</a>
`
modal_images += image;
modal_images += img;
});
var modalItem =
let modalItem =
`
<div class="modal_gal-group">
<div class="box">
@ -117,7 +117,7 @@ function onStart(){
`;
modalItems += modalItem;
}
var gallery_modal =
let gallery_modal =
`<div class="modal modal-photo mod modClose active" id='image-modal' >
<div class="modal_gal">
<div class="modal_gal-box owl-carousel owl-theme">
@ -126,9 +126,9 @@ function onStart(){
</div>
</div>
`;
media_wrapper.insertAdjacentHTML('afterEnd', gallery_modal);
$('.owl-carousel').owlCarousel({
lazyLoad:true,
loop: false,
@ -137,11 +137,11 @@ function onStart(){
items: 1,
dots: false,
});
$('.fancybox.modal_gal-item').fancybox({
loop: true,
thumbs: {
autoStart: true,
axis: 'x',
@ -149,35 +149,32 @@ function onStart(){
buttons: [
"close"
],
afterShow: function () {
$('.fancybox-toolbar').appendTo('.fancybox-slide--current > div');
},
'beforeClose': function () {
$('.modal-photo').removeClass("disable");
},
})
$('.to-top').click(function () {
$('body,html').animate({
scrollTop: 0
}, 100);
});
}
window.addEventListener('click', function(e){
//if (document.getElementById('image-modal').contains(e.target) && !e.target.closest('.modal_gal') && !e.target.closest('.owl-nav')){
// document.getElementById('image-modal').remove();
//}
window.addEventListener('click', function(e){
if (document.getElementById('image-modal') != undefined) {
if (document.getElementById('image-modal').contains(e.target) && !e.target.closest('.modal_gal') && !e.target.closest('.owl-nav')) {
document.getElementById('image-modal').remove();
}
}
let media_modal = document.getElementById('image-modal')
if (media_modal != undefined) {
if (document.getElementById('image-modal').contains(e.target) && !e.target.closest('.modal_gal') && !e
@ -190,4 +187,4 @@ function onStart(){
</script>
<!-- Modal gallery ============================================ -->
<!-- Modal gallery ============================================ -->

View File

@ -1,63 +1,63 @@
==
<!-- New Intro ========================================================= -->
<div class="new__intro" id="intro">
<div class="auto_container">
<div class="intro__inner">
<div {% if imageType == 'vertical' %} class="event__vertical wow fadeIn" data-wow-duration=".5s" data-wow-delay=".1s" {% else %} class="event__horizontal wow fadeIn" data-wow-duration=".5s" data-wow-delay=".1s"{% endif %}>
<div class="title">
{{'В центре событий'|_}}
</div>
<div {% if imageType == 'vertical' %} class="event__content" {% endif %}>
{% if postFeatured.image %}
<div class="event__photo">
<img src="{{ url('/') }}{{imagetype == 'vertical' ? postFeatured.image[0].photo|media : postFeatured.image[0].photo|media|resize(1080, 385)}}" alt="">
<div class="new__intro" id="intro">
<div class="auto_container">
<div class="intro__inner">
<div {% if imageType == 'vertical' %} class="event__vertical wow fadeIn" data-wow-duration=".5s" data-wow-delay=".1s" {% else %} class="event__horizontal wow fadeIn" data-wow-duration=".5s" data-wow-delay=".1s"{% endif %}>
<div class="title">
{{'В центре событий'|_}}
</div>
<div {% if imageType == 'vertical' %} class="event__content" {% endif %}>
{% if postFeatured.image %}
<div class="event__photo">
<img src="{{ url('/') }}{{imagetype == 'vertical' ? postFeatured.image[0].photo|media : postFeatured.image[0].photo|media|resize(1080, 385)}}" alt="">
</div>
{% endif %}
<div {% if imageType == 'vertical' %} class="event__info"{% endif %}>
<a href="{{ 'post'|page ({id: postFeatured.id, slug: postFeatured.slug})}}" class="event__title">
{{ postFeatured.title }}
</a>
<div class="event__text">
{{ postFeatured.introductory|raw }}
</div>
<div class="event__end">
<div class="event__time">
{{ postFeatured.published_at| date("d.m.Y") }}
</div>
{% endif %}
<div {% if imageType == 'vertical' %} class="event__info"{% endif %}>
<a href="{{ 'post'|page ({id: postFeatured.id, slug: postFeatured.slug})}}" class="event__title">
{{ postFeatured.title }}
<a href="{{ 'post'|page ({id: postFeatured.id, slug: postFeatured.slug})}}" class="event__link">
{{'Узнать больше'|_}}
</a>
<div class="event__text">
{{ postFeatured.introductory|raw }}
</div>
<div class="event__end">
<div class="event__time">
{{ postFeatured.published_at| date("d.m.Y") }}
</div>
<a href="{{ 'post'|page ({id: postFeatured.id, slug: postFeatured.slug})}}" class="event__link">
{{'Узнать больше'|_}}
</a>
</div>
</div>
</div>
</div>
</div>
<div class="extra__news wow fadeIn" data-wow-duration=".5s" data-wow-delay=".1s">
<div class="other__news">
<div class="title">
<a href="{{ 'category'|page({ slug: intro_cat.slug })}}">
{{intro_cat.name}}
</a>
<a href="{{ 'category'|page({ slug: intro_cat.slug })}}">
<img src="{{ 'assets/images/arrow-right.svg'|theme }}" alt="">
</a>
</div>
<div {% if imageType == 'vertical' %} class="news__content" {% else %} class="horizontal_news__content" {% endif %}>
{% for item in intro_cat_news %}
<div class="content__item">
<a href="{{ 'post'|page ({id: item.id, slug: item.slug})}}" class="content__title">
{{ item.published_at| date("d.m") }}
</a>
<a href="{{ 'post'|page ({id: item.id, slug: item.slug})}}" class="content__text">
{{item.title}}
</a>
</div>
{% endfor %}
<div class="extra__news wow fadeIn" data-wow-duration=".5s" data-wow-delay=".1s">
<div class="other__news">
<div class="title">
<a href="{{ 'category'|page({ slug: intro_cat.slug })}}">
{{intro_cat.name}}
</a>
<a href="{{ 'category'|page({ slug: intro_cat.slug })}}">
<img src="{{ 'assets/images/arrow-right.svg'|theme }}" alt="">
</a>
</div>
<div {% if imageType == 'vertical' %} class="news__content" {% else %} class="horizontal_news__content" {% endif %}>
{% for item in intro_cat_news %}
<div class="content__item">
<a href="{{ 'post'|page ({id: item.id, slug: item.slug})}}" class="content__title">
{{ item.published_at| date("d.m") }}
</a>
<a href="{{ 'post'|page ({id: item.id, slug: item.slug})}}" class="content__text">
{{item.title}}
</a>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
<!-- New Intro end ==================================================== -->
</div>
<!-- New Intro end ==================================================== -->

View File

@ -1,12 +1,14 @@
==
<?php
function onStart(){
$this['categories'] = \Indikator\News\Models\Categories::orderBy("sort_order")->where("id", "!=", $this->theme->politics_news)->limit(8)->get();
$this['categories'] = \Indikator\News\Models\Categories::orderBy("sort_order")
->where("id", "!=", $this->theme->politics_news)->limit(8)->get();
$last_categories = $this['categories']->slice(0, 4)->pluck('id')->toArray();
$this['last_category_posts'] = \Indikator\News\Models\Posts::whereIn('category_id', $last_categories)->where("locale", App::getLocale())->orderBy("published_at", "desc")->limit(4)->get();
$this['last_category_posts'] = \Indikator\News\Models\Posts::whereIn('category_id', $last_categories)
->where("locale", App::getLocale())
->orderBy("published_at", "desc")->limit(4)->get();
}
?>
@ -37,7 +39,7 @@ function onStart(){
{{item.title}}
</a>
</div>
{% endfor %}
{% endfor %}
</div>
<div class="theme_btn">
@ -95,7 +97,7 @@ function onStart(){
{% endif %}
{% endif %}
</div>
<div class="latest_item-info">
<h4 class="latest_item-title">
{{ post.title }}
@ -143,4 +145,4 @@ function onStart(){
</div>
</div>
</section>
<!-- New Banner end =================================================== -->
<!-- New Banner end =================================================== -->

View File

@ -2,10 +2,18 @@
<?php
function onStart()
{
$this['news'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("status", 1)->where("category_id", $this->theme->year_category)->orderBy('published_at', 'desc')->get()->first();
$this['news'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())
->where("status", 1)->where("category_id", $this->theme->year_category)
->orderBy('published_at', 'desc')
->get()->first();
$this["cat"] = \Indikator\News\Models\Categories::where("id", $this->theme->year_category)->first();
$this['news_second'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())->where("status", 1)->where("category_id", $this->theme->year_category_second)->orderBy('published_at', 'desc')->get()->first();
$this['news_second'] = \Indikator\News\Models\Posts::where("locale", App::getLocale())
->where("status", 1)
->where("category_id", $this->theme->year_category_second)
->orderBy('published_at', 'desc')
->get()->first();
$this["cat_second"] = \Indikator\News\Models\Categories::where("id", $this->theme->year_category_second)->first();
}
?>
@ -15,7 +23,7 @@ function onStart()
<div class="auto_container">
<div class="universary__inner">
<div class="title">
</div>
<div class="univer__wrap">
<div class="universary__emblem">
@ -28,9 +36,6 @@ function onStart()
<img src="{{attribute(this.theme, 'year_category_image').path}}" alt="">
</a>
<div class="univer__info new_univer_info">
<!-- <div class="univer__time">
{{ news.published_at| date("d.m") }}
</div> -->
<a href="{{ ''| page}}/post/{{news.id}}/{{news.slug}}" class="univer__text">
{{ news.title }}
</a>
@ -42,9 +47,6 @@ function onStart()
<img src="{{attribute(this.theme, 'year_category_second_image').path}}" alt="">
</a>
<div class="univer__info new_univer_info">
<!-- <div class="univer__time">
{{ news_second.published_at| date("d.m") }}
</div> -->
<a href="{{ ''| page}}/post/{{news_second.id}}/{{news_second.slug}}" class="univer__text">
{{ news_second.title }}
</a>
@ -55,4 +57,4 @@ function onStart()
</div>
</div>
</div>
<!-- Universary end =================================================== -->
<!-- Universary end =================================================== -->