DevCraft Документации
РазработкиDatalife Engine (DLE)Хаки и простые модули

Отдельные страницы как на кинопоиске

Хак для DLE: отдельные страницы как на кинопоиске.

Для чего это вообще нужно?

Для вебмастеров. Если вы создаёте сайт с кино и к фильму добавляете очень много информации, но негде её вывести, этот хак поможет: можно организовать вывод на отдельных страницах и при необходимости скрыть спарсенные данные от поисковиков. Также эти страницы можно использовать для дополнительного заработка.

Для пользователей. Если на странице слишком много информации, посетитель может не дойти до самого фильма — отдельные страницы разгружают карточку.

Открываем engine/engine.php ищем:

switch ( $do ) {

и ниже ставим

case "screens" :
        include ENGINE_DIR . '/modules/extrap/screens.php';
        break;

Теперь поясню:

case "screens" - вместо screens вписываем любое своё название, я применил такое для кадров и скриншотов, т.е. дальнейший адрес к скриншотам будет содержать название screens.

/extrap/screens.php - это указанный путь до шаблонизатора самой отдельной страницы. Я рекомендую создать отдельную папку для таких страниц, как у меня extrap, но можете просто и в папку engine/modules кинуть. Главное не забудьте поменять путь в коде для вставки выше

Ищем далее:

elseif ($do == 'static') $titl_e = $static_descr;

Ниже ставим:

elseif ($do == 'screens') $nam_e = "Скриншоты к ". $title;

Как вы поняли, тут мы настраиваем заголовок страницы. Указываем на своё усмотрение.

Теперь заходим в engine/modules и создаёмфайл screens.php. Поскольку я все страницы поместил в отдельную папку, то я создал сначала её, а в ней и сам файл создал. В этот файл прописываем следующий код:

<?php
if( !defined( 'DATALIFEENGINE' )) return;
$id_news = intval($_GET['id']);     //преемник нашего id новости
$row = $db->query("SELECT * FROM ".PREFIX."_post WHERE id='$id_news'");

while($list = $db->get_row( $row ))
{
    $title = $list['title'];
    $xf = xfieldsdataload($list['xfields']);

    if(!empty($xf['screens']))
        $screens = $xf['screens'];
    else
        $screens = "Скриншотов нет, но вы держитесь там!";

    if( $config['allow_alt_url'] ) {
        $full_link = $config['http_home_url'] . $id_news . "-".$list['alt_name'].".html";
    } else {
        $full_link = $config['http_home_url'] . "index.php?newsid=" . $id_news;
    }
}

$tpl->set( '{news-id}', $id_news);
$tpl->set( '{title}', $title);
$tpl->set( '{screens}', $screens);

$tpl->set( '{full-link}', $full_link );

$tpl->load_template( 'extrap/screens.tpl' );  //Ваш шаблон в папке с темой.

$tpl->compile( 'content' );
$tpl->clear();
?>

это примерный код. Давайте пройдёмся по пунктам:

$title = $list['title'];

Так мы читаем значение ячейки таблицы с фильмом — например заголовок — и кладём его в переменную $title. $list — строка из БД, title — имя столбца. То же повторяем для каждой нужной ячейки.

$xf = xfieldsdataload($list['xfields']);
    $kpid = $xf['kinopoisk_id'];

Это примерные параметры для вывода информации из доп. полей.

$xf['kinopoisk_id'] - вместо kinopoisk_id прописываем название поля, которое вам нужно. Вот так мы будем выводить скриншоты, к примеру.

if(!empty($xf['screens']))
        $screens = $xf['screens'];
    else
        $screens = "Скриншотов нет, но вы держитесь там!";

Этим кодом проверяем: если доп. поле со скриншотами не пустое, выводим кадры; иначе показываем заглушку:

Скриншотов нет, но вы держитесь там!

Меняем на своё.

Идём далее, код:

$tpl->set( '{news-id}', $id_news);

Этим кодом мы определяем теги, которые будут выводится в шаблоне. Думаю тут понятно что к чему. Тег и его определяющее значение.

Дальше:

$tpl->load_template( 'extrap/screens.tpl' );

Тут определяем сам шаблон. Нужно его создать, об этом дальше.

С шаблонизатором покончили, теперь переходим в папку с вашим шаблоном и создаём файл шаблона. Я писал выше, что для отдельных страниц создал папку и туда внутрь кидаю все файлы. И такой код получается у нас:

<div class="full-wrap">
    <article class="extrap-item movie-full">
        <fieldset class="screenshots">
            <legend>Скриншоты и кадры к фильму</legend>
            {screens}
        </fieldset>
    </article>
</div>

Нужны ли тут объяснения? Думаю, что нет.

Открываем .htaccess в корне сайта и после

RewriteEngine On

добавляем

RewriteRule ^screens/([0-9]+)(/?)$ index.php?do=screens&id=$1 [L]

Тем самым мы получаем ссылку на страницу со скриншотами и можем в теги, типа aviableдобавлять значение screens

На этом всё. Для каждой страницы повторяем все пункты с самого начала.

====== Небольшой бонус для тех, кто использует шаблон FILMAX. В файл шаблона main.tpl после

[aviable=main]
         <div class="carou-wr">
            <div class="carou center">
                <div id="owl-carou">
                    {custom template="slider" aviable="global" order="rating" limit="15" cache="yes"}
                </div>
            </div>
        </div>
            [/aviable]

(это примерный код) ставим

[aviable=showfull|screens|play|people|download]
        <div class="top-menu">
            <div class="container">
                <ul>
                    <li class="active[aviable=play] open[/aviable]"><a href="/play/{news-id}/">Смотреть онлайн</a></li>
                    <li class="active[aviable=showfull] open[/aviable]"><a href="/index.php?newsid={news-id}" rel="nofollow">Описание</a></li>
                    <li class="active[aviable=people] open[/aviable]"><a href="/people/{news-id}/">Съёмочная группа</a></li>
                    <li class="active[aviable=screens] open[/aviable]"><a href="/screens/{news-id}/">Кадры</a></li>
                </ul>
            </div>
        </div>
        [/aviable]

в стили добавляем

.top-menu {
  width: 100%;
  height: 40px;
  display: block;
  background: #d2d5da;
}

.top-menu .container {
  padding: 0;
  background-color: transparent;
}

.top-menu ul {
  width: 100%;
  margin: 0 auto;
  display: table;
  list-style: none;
  position: relative;
}

.top-menu ul li {
  line-height: 40px;
  text-align: center;
  display: table-cell;
  vertical-align: middle;
}

.top-menu ul li.active a {
  width: 100%;
  color: #535865;
}

.top-menu ul li.active:hover a {
  color: #292c33;
  cursor: pointer;
}

.top-menu ul li.open {
  background: white;
}

.top-menu ul li.open a {
  color: #292c33;
}

.top-menu ul li a,.top-menu ul li span {
  outline: none;
  cursor: default;
  font-size: 12px;
  font-weight: bold;
  display: inline-block;
  text-transform: uppercase;
  color: rgba(83,88,101,0.3);
}

.top-menu ul li a .count,.top-menu ul li span .count {
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  -o-border-radius: 2px;
  border-radius: 2px;
  top: -1px;
  color: #FFF;
  height: 14px;
  padding: 0 3px;
  font-size: 11px;
  margin-left: 5px;
  font-weight: 400;
  line-height: 15px;
  text-align: center;
  position: relative;
  display: inline-block;
  vertical-align: middle;
  background-color: #8F95A3;
}

.top-menu.social li:last-child {
  width: 220px;
}

Открываем engine/modules/main.php и ищем:

if ( $dle_module == "showfull" AND $news_found ) {

и меняем на

if ($dle_module == "screens" || $dle_module == "play" || $dle_module == "people") {
    if (isset ( $_GET['id'] )) $newsid = intval ( $_GET['id'] ); else $newsid = 0;
    $tpl->set( '{news-id}', $newsid );
}
if ( $dle_module == "showfull" AND $news_found ) {

    if (isset ( $_GET['newsid'] )) $newsid = intval ( $_GET['newsid'] ); else $newsid = 0;

Принцип, думаю, понятен В шаблоны можно подключить спокойно скрипты, которые подключаются через инклуд или апи. к примеру:

<div class="full-wrap">
    <article class="movie-item movie-full">
        <div id="apivideoplayer"></div>
        <script type="text/javascript" src="http://kinospace.org/player/api.php?w=1264&h=650&kpid={kpid}&abuse={abuse}&trailers=yes&style=2&title={title}&poster={poster}"></script>
    </article>
</div>